我正在新的React项目中试用immutable.js,但在将地图添加到处于状态的现有地图列表中时遇到了限制。
我以前已经写过(使用数组和对象):
this.setState({
objectsArray: [...this.state.objectsArray, newObject];
})
但是我正在努力寻找与immutable.js合适的对等物。我已经尝试过类似的方法,但是没有成功:
state.get('mapsList').merge(newMap);
我在网络上合并列表和合并地图时发现了很多例子,但是我有一个地图列表,关于不可变列表的官方文档并不十分详尽。
也感谢有关React / Redux状态操作的资源和最佳实践的链接,谢谢!
答案 0 :(得分:1)
您的“旧”代码创建了一个新数组,其中包含已经存在的相同对象以及一个新对象。
据我所知,不可变的List#push
做同样的事情:
push()
从此
List
的{{1}}开始,返回附加有提供的values
的新List
。size
所以:
push(...values: Array<T>): List<T>
旁注:我使用的是this.setState(({mapsList}) => {
return {mapsList: mapsList.push(newMap)};
});
的回调版本,因为不允许您执行旧代码所执行的操作。如果要基于现有状态设置新状态,则必须使用回调; details。
答案 1 :(得分:1)
您需要使用
更新列表 state = state.updateIn(['mapsList'], function(list) { return list.push(newMap); })
将使用新的newMap更新mapsList列表