2015-11-19 78 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}} –