javascript - ReactJS - 无法打印出待办事项,this.props.todos.map 不是函数

标签 javascript reactjs typeerror

我是 React 新手,我正在尝试从 GET 请求中打印出一些数据并将它们打印出来,但我遇到了 Uncaught TypeError: this.props.todos.map is not a function - 错误。

如果我在成功函数上更改 this.setState({data: data}) 我可以在我的控制台中获取数据,但是有没有快速简单的方法来解决这个问题以打印数据?

App.js

import React, { Component } from 'react';

import $ from 'jquery';
import Todos from "./Components/Todos"


class App extends Component {
  constructor(){
    super();
    this.state = {
      todos:[]
    }
  }
  getTodos(){
    $.ajax({
      type: "GET",
      url: 'url',
      dataType:'json',
      headers: {
        Authorization: "Basic " + btoa("username" + ":" + "password")
      },
      cache: false,
      success: function(data){
        this.setState({todos: data}, function(){
          console.log(this.state);
        });
      }.bind(this),
      error: function(xhr, status, err){
        console.log(err);
      }
    });
  }
  componentWillMount(){
    this.getTodos();
  }
  componentDidMount(){
    this.getTodos();
  }

  render() {
    return (
      <div className="App">
        <Todos todos={this.state.todos}/>
      </div>
    );
  }
}

export default App;

Todos.js

import React, { Component } from 'react';
import TodoItem from './TodoItem';

class Todos extends Component {
  render() {
    let todoItems;
    if(this.props.todos){

      todoItems = this.props.todos.map(todo => {
        return (
          <TodoItem key={todo.code} todo={todo} />
        );
      });
    }
    return (
      <div className="Todos">
        <h3>Results:</h3>
        {todoItems}
      </div>
    );
  }
}

export default Todos;

TodoItem.js

import React, { Component } from 'react';

class TodoItem extends Component {
  render() {
    return (
      <li className="Todo">
        <strong>{this.props.todo.code}</strong>
      </li>
    );
  }
}


export default TodoItem;

来自控制台日志的片段:

enter image description here

最佳答案

待办事项必须始终是一个数组。因此,在您的成功函数中像这样更改 setState。

this.setState({todos: (data.resources ? data.resources : [])}, function(){
          console.log(this.state);
        });

关于javascript - ReactJS - 无法打印出待办事项,this.props.todos.map 不是函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49495142/

相关文章:

javascript - 使用 JavaScript 进行两次测试时遇到问题

javascript - 单击品牌时 Bootstrap 导航栏不会设置事件页面

javascript - 如何在 immutable.js 中合并 map ?

javascript - TypeError [ERR_INVALID_ARG_TYPE] : The "original" argument must be of type Function. 接收类型未定义

javascript - 我如何在javascript中打开任何类型的文件并将其保存为字符串

javascript - NodeJS、mysql 和异步结果

javascript - 在 DOM 更新后运行的 React 钩子(Hook)

reactjs - 开 Jest , enzyme : Invariant Violation: You should not use <Route> or withRouter() outside a <Router>

vue.js - [Vue警告] : Error in render: “TypeError: Cannot read property ' xxx' of undefined”

python - 异常TypeError: 'argument list must be a tuple'