React + immutable.js:将 Map 合并到 List of Maps 中以更新状态
React + immutable.js: merge Map into List of Maps to update state
我正在我的新 React 项目中尝试 immutable.js,但我无法将地图添加到我所在州的现有地图列表中。
我以前会写(使用数组和对象):
this.setState({
objectsArray: [...this.state.objectsArray, newObject];
})
但我正在努力寻找 immutable.js 的合适等价物。我试过类似的方法,但没有成功:
state.get('mapsList').merge(newMap);
我在网上找到了大量合并列表和合并地图的示例,但我有一个地图列表,关于不可变列表的官方文档并不十分详尽。
有关 React/Redux 状态操作的资源和最佳实践的链接也很受欢迎,谢谢!
您的 "old" 代码创建了一个新数组,其中包含已存在的相同对象以及一个新对象。
据我所知,Immutable 的 List#push
做同样的事情:
push()
Returns a new List
with the provided values
appended, starting at this List
's size
.
push(...values: Array<T>): List<T>
所以:
this.setState(({mapsList}) => {
return {mapsList: mapsList.push(newMap)};
});
旁注:我正在使用 setState
的回调版本,因为您不能执行旧代码执行的操作。如果您根据现有状态设置新状态,您必须使用回调; details.
您需要使用
更新列表
state = state.updateIn(['mapsList'], function(list) { return list.push(newMap); })
这将使用新的 newMap 更新 mapsList 列表
我正在我的新 React 项目中尝试 immutable.js,但我无法将地图添加到我所在州的现有地图列表中。
我以前会写(使用数组和对象):
this.setState({
objectsArray: [...this.state.objectsArray, newObject];
})
但我正在努力寻找 immutable.js 的合适等价物。我试过类似的方法,但没有成功:
state.get('mapsList').merge(newMap);
我在网上找到了大量合并列表和合并地图的示例,但我有一个地图列表,关于不可变列表的官方文档并不十分详尽。
有关 React/Redux 状态操作的资源和最佳实践的链接也很受欢迎,谢谢!
您的 "old" 代码创建了一个新数组,其中包含已存在的相同对象以及一个新对象。
据我所知,Immutable 的 List#push
做同样的事情:
push()
Returns a new
List
with the providedvalues
appended, starting at thisList
'ssize
.push(...values: Array<T>): List<T>
所以:
this.setState(({mapsList}) => {
return {mapsList: mapsList.push(newMap)};
});
旁注:我正在使用 setState
的回调版本,因为您不能执行旧代码执行的操作。如果您根据现有状态设置新状态,您必须使用回调; details.
您需要使用
更新列表state = state.updateIn(['mapsList'], function(list) { return list.push(newMap); })
这将使用新的 newMap 更新 mapsList 列表