React / Redux:状态调用两次? (concat(),而不是push())

时间:2016-11-03 22:48:32

标签: reactjs redux react-redux

我遇到了将todo添加到todos经典版本的问题。在React / Redux上进行。

此处reducer-todos.js

export default function (state=[
    {
        id: 0,
        todo: "Study English"
    },
    {
        id: 1,
        todo: "Run sprint"
    },
    {
        id: 2,
        todo: "Call Bob"
    }], action) {
    switch(action.type) {
        case "ADD_TODO":
            return state.push({id: state.length, todo: action.todo});
            break;
    }
    return state;
}

这是我得到的问题:

enter image description here

不知何故todos对象变为4,而不是数组[4]。为什么会这样?

如果需要其他信息,请与我们联系。

1 个答案:

答案 0 :(得分:2)

  

不知何故,todos对象变为4,而不是Array [4]。为什么会这样?

您正在使用push,它将返回其新尺寸。使用concat代替将返回一个新数组,同时添加新项目而不会发生变异。

所以这个:

return state.push({id: state.length, todo: action.todo});

应该成为:

return state.concat({id: state.length, todo: action.todo});