当前位置: 首页 > 面试题库 >

React Redux Reducer:'this.props.tasks.map不是函数'错误

茅秦斩
2023-03-14
问题内容

我正在做一个React Redux的例子;但是,我遇到了一个问题,并出现以下错误:

TypeError:this.props.tasks.map不是函数[了解更多]

我已经尝试了很多事情,但似乎无法理解为什么它不起作用。我相信是allReducers从Tasks函数映射任务的时候。我已经来回修复了此错误,但随后它会抱怨它是未定义的。我将解决此问题并循环回到此问题。任何帮助,将不胜感激。我确定我犯了一个简单的错误。以下是我的以下文件

App.js

import React from 'react';

import TaskBoard from "../containers/task-board";

require('../../scss/style.scss');



const App = () => (

    <div>

        <h2>Task List</h2>

        <hr />

        <TaskBoard/>

    </div>

);



export default App;

index.js

    import {combineReducers} from 'redux';

    import {Tasks} from './reducer-tasks';

    const allReducers = combineReducers({

        tasks: Tasks

    });



    export default allReducers

task-board.js

    import React, {Component} from 'react';

    import {bindActionCreators} from 'redux';

    import {connect} from 'react-redux';

    import {deleteTaskAction} from '../actions/ActionIndex';

    import {editTaskAction} from '../actions/ActionIndex';

    class TaskBoard extends Component {

        renderList() {

            return this.props.tasks.map((task) => {

                if(task.status == "pending"){

                    return (<li key={task.id}>

                        {task.id} {task.description}

                        <button type="button">Finish</button>

                        <button type="button">Edit</button>

                        <button onClick={() => this.props.deleteTask(task)} type="button">Delete</button>

                    </li>

                );

            }

        });

    }

    render() {

        if (!this.props.tasks) {

            console.log(this.props.tasks);

            return (<div>You currently have no tasks, please first create one...</div>);

        }

        return (

            <div>

                {this.renderList()}

            </div>

        );

    }

}

    function mapStateToProps(state) {

        return {

            tasks: state.tasks

        };

    }

    function matchDispatchToProps(dispatch){

        return bindActionCreators(

        {

            deleteTask: deleteTaskAction,

            editTask: editTaskAction

        }, dispatch)

    }

    export default connect(mapStateToProps,matchDispatchToProps)(TaskBoard);

reducer-tasks.js

const initialState = {

    tasks: [

        {

            id: 1,

            description: "This is a task",

            status: "pending"

        },

        {

            id: 2,

            description: "This is another task",

            status: "pending"

        },

        {

            id: 3,

            description: "This is an easy task",

            status: "pending"



        }

    ]

}



export function Tasks (state = initialState, action) {

    switch (action.type) {

        case 'ADD_TASK':

            return Object.assign({}, state, {

                tasks: [

                    ...state.tasks,

                    {

                        description: action.text,

                        status: action.status

                    }

                ]

            })

            break;



        case 'EDIT_TASK':

            return action.payload;

            break;



        case 'DELETE_TASK':

            return Object.assign({}, state, {

                status: action.status

            })

            break;

    }



    return state;

}

actionindex.js

    export const addTaskAction = (task) => {

        return {

            type: 'ADD_TASK',

            text: "Here is a sample description",

            status: "pending"

        }

    };

    export const deleteTaskAction = (task) => {

        return {

            type: 'DELETE_TASK',

            status: "deleted"

        }

    };

    export const editTaskAction = (task) => {

        return {

            type: 'EDIT_TASK',

            payload: task

        }

    };

问题答案:

这是因为函数“ map”只能用于数组,而不能用于对象。

如果在task-
board.js的render函数中打印出this.props.tasks,您会发现它是一个包含task数组的对象,而不是实际的task数组本身。

因此解决此问题非常容易,而不是:

    return this.props.tasks.map((task) => {

它的

    return this.props.tasks.tasks.map((task) => {

然后就可以了



 类似资料:
  • 我得到了一个错误:这个$情态动词模态不是一个函数 我通过gulp文件从wwwroot文件夹中的Node_模块获得了ng2-bs3-modal。 我的文件夹结构是: 如果我将ng2-bs3-modal移动到脚本(typescript)文件夹,它将提供jasmin区域。js错误。在上面的结构中,我得到了“this.$modal.modal不是函数”错误,因为ng2-bs3-modal中的所有类型脚本都

  • 问题内容: 我正在尝试编写示例AngularJS和SpringMVC项目。spring方法可以正常工作,但是我的站点控制器中的函数声明存在问题。我的应用应该从文本输入中返回一个单词,但是当我单击按钮时,出现了以下错误: 这是我的index.html: 和controller.js: 我注意到,这一定是ng-click值中的函数声明存在某种问题。在现场启动时,controler.js可以正常运行,但

  • 问题内容: 我已经建立了一个工厂来处理我的控制器的功能,但是不知何故,控制器会在其中一个功能上返回错误: 错误:Auth.getUser(…)。成功不是函数@ http:// localhost:8080 / app / controllers / mainCtrl.js:10:1 … 我不知道这是怎么回事,其余功能似乎工作正常? 主控制器: 问题答案: 请参阅$ http服务文档中的 “ 弃用声

  • 我正在一个WordPress网站上工作——它有大量的自定义代码和插件以及各种JQuery、引导和框架加载。 在最后一个加载页脚的最底部-I处: 我得到了错误: 显然,JQuery已经加载。我也尝试过在那里放置其他JQuery——除了加载的JQuery之外——我得到了相同的错误。 为什么我会得到$nota函数错误?

  • 我正在将sequelizejs与expressjs应用程序一起使用。 这里是我的用户模型的代码。 user.js TypeError:User.FindAll不是router.Get(D:\stateboard-project\v2\components\user\usercomponent.js:6:8)在Layer.Handle[as handle_request](D:\stateboard

  • 尝试从组件订阅HTTP-GET的解析响应。得到一个错误的说法。无论是从HTTPService还是从组件类使用,map都不是一个函数。 但以下工作: 解析在Httpdemo服务中也不起作用。 我的代码中的用法有什么问题?