2015-11-19 39 views
3

在我的反应/终极版的应用程序,我使用这样的事情在我的减速器设置状态:immutablejs(反应/终极版),“推”到状态不变

state.set('search', myResults); 

状态是immutablejs Map()。当toJS()是在其上运行的对象(不再是一成不变的对象)的格式是像这样:

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

所以你必须state.search.results

这个工程很好,但我有一个场景,我需要“推”到这个地图的搜索部分。我想合并会照顾这个,但它似乎并没有按照我的设想工作。我曾尝试:

state.mergeIn('search', singleResult); 

以及

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

既不似乎工作。预期的结果是将该单个结果推入状态Map()(而不是像.set那样重写它)。所以期望的结果会看起来像这样:

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

我不确定如何做到这一点与immutablejs,任何意见将不胜感激。谢谢!

回答

6

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

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

另外要注意,如果搜索包含正常JS阵列 - 然后数组本身仍然是一个可变的数据结构。除非使用fromJS(),否则Immutable.JS不会深入转换数据类型。

+0

这个帐户是否为结果图层?谢谢! – ajmajmajma

+1

toJS也深转换回JS,所以如果我有像Map({'a':List()})的结构,那么它将转换为{a:[]}(如果我正确理解你的问题。)我猜你正在做state = Map({search:[results]}) - later:state.update('myanswerabove')然后在你的用户界面或其他地方{results:state.toJS()}这将是{结果:{search:results with new singleResult}} –