immutablejs (react/redux) , "push" 进入不可变状态

immutablejs (react/redux) , "push" into state with immutable

在我的 react/redux 应用程序中,我使用类似这样的方式在我的减速器中设置状态:

 state.set('search', myResults);

状态是不可变的Map()。当 toJS() 为 运行 时对象的格式(不再是不可变对象)是这样的:

 {
    results: { ..all results in here }
 }

所以你会 state.search.results.

这很好用,但是我有一个场景需要 "push" 进入这张地图的搜索部分。我在想 merge 会解决这个问题,但它似乎并没有像我想象的那样工作。我试过了:

  state.mergeIn('search', singleResult);

以及

 state.merge({ 'search': singleResult });

似乎都没有用。预期的结果是将单个结果推入状态 Map()(而不是像 .set 那样覆盖它)。所以期望的结果最终看起来像这样:

 {
    results: { singleResult pushed or merged into here with other results }
 }

我不确定如何使用 immutablejs 执行此操作,如有任何建议,我们将不胜感激。谢谢!

您需要为此使用更新。合并不会在键中将数组连接在一起。

state.update('search', search => search.concat(singleResult));

另请注意,如果搜索包含一个普通的 JS 数组 - 那么该数组本身仍然是一个可变数据结构。 Immutable.JS 除非您使用 fromJS(),否则不会进行数据类型的深度转换。