Reactjs 反应+;Redux不可变数组缩减器

Reactjs 反应+;Redux不可变数组缩减器,reactjs,redux,Reactjs,Redux,我需要一些关于Redux不可变数组状态的帮助。我从actions中获取对象数组,并将其传递给reducer。 在我的reducer文件中,我对数组进行免疫,它每次都给我一个新副本 我面临的问题是,它总是给我以前的+新数组(这是正确的),就像不断添加新状态的新数组,我只需要最后一次更新数组。因为我必须通过考试才能做出反应 export default (state = {}, action) => { switch (action.type) { case EVT.L

我需要一些关于Redux不可变数组状态的帮助。我从actions中获取对象数组,并将其传递给reducer。 在我的reducer文件中,我对数组进行免疫,它每次都给我一个新副本

我面临的问题是,它总是给我以前的+新数组(这是正确的),就像不断添加新状态的新数组,我只需要最后一次更新数组。因为我必须通过考试才能做出反应

export default (state = {}, action) => {
    switch (action.type) {
        case EVT.LB_FOLLOWING_CHANGE:
            return [
                ...state,
                action.payload
            ];
            break;
        default:
            return state;
    }
};
只需执行以下操作:

    case EVT.LB_FOLLOWING_CHANGE:
        return [action.payload];

由于您使用的是扩展运算符
,因此获得的是上一个+新数组。从MDN文档中

扩展语法允许在需要多个参数(用于函数调用)或多个元素(用于数组文字)或多个变量(用于解构赋值)的位置展开表达式

在您的情况下,在
state
之前使用spread操作符将state数组中的所有值追加到要返回的数组中。要仅返回操作中收到的值,只需返回
[action.payload]


您可以参考上面的文档链接,查看更多有关如何正确使用排列语法的示例。

在一定程度上取决于您的操作。根据您所说的,我认为您的操作返回的(action.payload)是您希望您的状态成为的状态-对吗?如果是这样,请尝试将
return[…state,action.payload]
更改为
return[action.payload]
。我应该澄清,上述操作应该有效,因为您返回的是新状态,如果您的有效负载包含该状态中所需的所有内容,则您只需要返回这些内容。当您在返回开始时有
…state
时,首先返回状态的当前值,然后附加action.payload。这就是为什么您总是获得以前的阵列和新阵列。