处于Redux状态的数组列表

处于Redux状态的数组列表,redux,immutable.js,Redux,Immutable.js,这是一个关于Redux js中状态的问题。我有一个处于以下状态的数组列表: { list: list } 根据Redux文档,我不应该修改reducer中的状态。我想在列表中添加一个新项目。我应该克隆列表,还是简单地将新项目附加到列表中: let newList = state.list; newList.push(newItem); return { list: newList } 上面的代码实际上修改了原始状态,因为newList与“state.list”是同一个列表。这是一种正

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

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

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

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

您在这里修改列表并返回相同的引用。我相信像下面这样的东西应该是一个新的副本

return { list: [...state.list, newItem] }
使用immutableJS不是强制性的。但是你需要确保不要改变状态

查看库以确保您的状态未被编辑


Dan(redux的创建者)的这篇文章也应该有所帮助

如果您对spread operator不感兴趣,您也可以这样做:

var newList = list.slice(); // copy the array
newList.concat(['item']);
return {
  list : newList
}
事实上,
Array#concat
的行为是不可变的。它返回一个新数组,同时保持初始数组不变。因此,不仅没有必要创建数组的副本,而且上面的代码也会失败,因为您没有指定返回值。