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"))
有关更详细的示例,您也可以查看此帖子