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