Redux状态下的数组列表

时间:2016-01-05 16:39:13

标签: redux immutable.js

这是关于Redux js中的状态的问题。我在状态中有一个数组列表:

{
  list: list
}

根据Redux文档,我不应该修改reducer中的状态。我想在列表中附加一个新项目。我应该克隆列表,还是只是将新项目附加到列表中:

let newList = state.list;
newList.push(newItem);
return {
  list: newList
}

上面的代码实际上修改了原始状态,因为newList与“state.list”是相同的列表。这是一个好的做法,还是应该使用immutableJS来克隆列表?

2 个答案:

答案 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
}