React:TypeError:this.props.courses.map不是函数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了React:TypeError:this.props.courses.map不是函数相关的知识,希望对你有一定的参考价值。

我无法理解为什么我不能.map一个数组。

这是代码:

import React,  Component  from "react";
import  connect  from "react-redux";
import  fetchCourses  from "../../actions";

class Courses extends Component 
  componentDidMount() 
    this.props.fetchCourses();
  

  render() 
    console.log("this.props.payload.courses ", this.props.courses);
    const courses = this.props.courses.map(course => 
      return (
        <tr>
          <td>course.coursename</td>

          <td>course.coursetype ? "yes" : "no"</td>

          <td>course.courseweeklyhours</td>

          <td>
            <button>הסר</button>
          </td>
        </tr>
      );
    );

    return (
      <div>
        Courses
        courses
      </div>
    );
  


const mapStateToProps = state => 
  // console.log('state ', state);

  return 
    courses: state.courses
  ;
;

export default connect(
  mapStateToProps,
   fetchCourses 
)(Courses);

这是console.log的结果(渲染后的第一行)

enter image description here

我有两个问题

  1. 为什么我会收到此错误:TypeError:this.props.courses.map不是函数enter image description here
  2. 为什么console.log this.props.payload.courses被加载两次?
答案

您需要更正减速器实施。您的控制台输出表明this.props.courses是一个对象,其中一个键为courses,这是一个数组,因此您无法映射this.props.courses

由于你的reducer似乎在courses中以combinedReducer命名,并且你的初始状态是一个数组,你应该将更新后的状态也作为数组而不是对象返回

export default (state = [], action) 
    switch(action.type)
        case FETCH_COURSES: 
            return action.payload.data
        
        ...
    


以上是关于React:TypeError:this.props.courses.map不是函数的主要内容,如果未能解决你的问题,请参考以下文章

使用 React JS 制作动画

VueJS:在 v-if 中直接改变 prop 与 this.[prop]

React - TypeError:无法读取未定义的属性“img”

TypeError:无法读取未定义的属性“长度”(React,heroku)

react 开发遇到的问题

React - TypeError:jokes.map 不是函数