React + immutable.js:将地图合并到地图列表中以更新状态

时间:2018-08-27 16:32:56

标签: javascript reactjs ecmascript-6 react-redux immutable.js

我正在新的React项目中试用immutable.js,但在将地图添加到处于状态的现有地图列表中时遇到了限制。

我以前已经写过(使用数组和对象):

this.setState({
  objectsArray: [...this.state.objectsArray, newObject];
})

但是我正在努力寻找与immutable.js合适的对等物。我已经尝试过类似的方法,但是没有成功:

state.get('mapsList').merge(newMap);

我在网络上合并列表和合并地图时发现了很多例子,但是我有一个地图列表,关于不可变列表的官方文档并不十分详尽。

也感谢有关React / Redux状态操作的资源和最佳实践的链接,谢谢!

2 个答案:

答案 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列表