Redux 状态下的数组列表
Array list in Redux state
这是一个关于 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。但你需要确保不要改变状态。
查看 deep-freeze 库以确保您的状态未被编辑。
来自 Dan(redux 的创建者)的 video 也应该有所帮助
如果你不喜欢传播运算符,你也可以这样做:
var newList = list.slice(); // copy the array
newList.concat(['item']);
return {
list : newList
}
这是一个关于 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。但你需要确保不要改变状态。
查看 deep-freeze 库以确保您的状态未被编辑。
来自 Dan(redux 的创建者)的 video 也应该有所帮助
如果你不喜欢传播运算符,你也可以这样做:
var newList = list.slice(); // copy the array
newList.concat(['item']);
return {
list : newList
}