Reactjs 如何使用react/redux更新状态对象中的数组

Reactjs 如何使用react/redux更新状态对象中的数组,reactjs,redux,Reactjs,Redux,在我的减速机中,我有以下状态: const initialState = fromJS({ resources: false, testval: [0, 0, 0, 0],}) 我想在触发操作时附加或删除testval的数组值。我已经导入了immutable和immutability helper,但我正在努力使用语法来实现这一点 例如,这不起作用-状态没有改变: return update(state, { testval: { $set: 'te

在我的减速机中,我有以下状态:

const initialState = fromJS({
 resources: false,
 testval: [0, 0, 0, 0],})
我想在触发操作时附加或删除testval的数组值。我已经导入了immutable和immutability helper,但我正在努力使用语法来实现这一点

例如,这不起作用-状态没有改变:

return update(state, {
        testval: {
            $set: 'test'
        }
    });

看起来您可能混淆了两个不同的工具集。Immutable.js是一组专门的数据结构,而Immutability Helper库希望能够处理普通js对象


您可能需要阅读Redux文档的一节,其中讨论了如何正确地对纯JS数据进行不可变更新,以及文档页面中的相关链接。

好的,我使用不可变的方法解决了这个问题

添加到阵列:

return state.updateIn(['showtask'], arr => arr.push(action.userid))
从阵列中删除:

return state.updateIn(['showtask'], arr => arr.splice(arr.indexOf(action.userid),1))

因为你更新的方式不对

第一件事是数组将转换为列表对象,所以需要以列表样式进行更新

在下面的示例1中,我正在更新索引,您可以为此使用任何动态变量,item也是该索引的当前值。如果这是一个对象(在其他一些用例中),您可以修改该对象并返回它

const initialState =  Immutable.fromJS({
 resources: false,
 testval: [0, 0, 0, 0]});

//replace initial state with state, i just posted example code

initialState = initialState.set("testval",initialState.get("testval").update(1,(item)=>{
return 2;
}));
 console.log(initialState.get("testval"))
有关更详细的示例,您也可以查看此帖子