这是关于Redux js中的状态的问题。我在状态中有一个数组列表:
{
list: list
}
根据Redux文档,我不应该修改reducer中的状态。我想在列表中附加一个新项目。我应该克隆列表,还是只是将新项目附加到列表中:
let newList = state.list;
newList.push(newItem);
return {
list: newList
}
上面的代码实际上修改了原始状态,因为newList与“state.list”是相同的列表。这是一个好的做法,还是应该使用immutableJS来克隆列表?
答案 0 :(得分:9)
您正在改变此处的列表并返回相同的参考。我相信下面的内容应该是一个新的副本
return { list: [...state.list, newItem] }
使用immutableJS不是强制性的。但你需要确保不改变状态。
查看deep-freeze库,确保您的状态未被编辑。
来自Dan(redux的创建者)的这个video也应该有所帮助答案 1 :(得分:3)
如果您不热衷于传播运营商,您也可以这样做:
var newList = list.slice(); // copy the array
newList.concat(['item']);
return {
list : newList
}