2017-09-27 42 views
0

所以我有這樣的減速,我想,當動作被觸發,我想推一個物體進入and_keywords陣列更新在一個不變的方式更新嵌套在一個對象數組

import { fromJS } from 'immutable'; 
const initialState = fromJS({ 
    searchParams: { 
    limit: 100, 
    page: 1, 
    order_by: 'name', 
    filters: { 
     and_keywords : [] 
    } 
    }, 
}) 

。什麼到目前爲止,我所做的就是這

case ADD_KEYWORDS: 
return state 
    .setIn(['searchParams', 'filters', 'and_keywords'], '123'); 

我也試過

case ADD_KEYWORDS: 
return state 
    .updateIn(['searchParams', 'filters', 'and_keywords'], arr => arr.push('123')) 

https://facebook.github.io從文件中立足,但我似乎無法使它工作。執行此命令後沒有修改過

+0

不可變對象不會修改,您必須重新分配您正在修改的內容。所以,只需將'state ='添加到行的開始,它應該可以工作。 – IronWaffleMan

+0

我已經有'函數homePageReducer(state = initialState,action){'只是沒有包含它,因爲我只發佈了我的代碼片段 –

回答

1

updateIn版本應該工作:

const Immutable = require('immutable') 


const initialState = Immutable.fromJS({ 
    searchParams: { 
    limit: 100, 
    page: 1, 
    order_by: 'name', 
    filters: { 
     and_keywords : [] 
    } 
    }, 
}) 

const newState = initialState.setIn(['searchParams', 'filters', 'and_keywords'], initialState.getIn(['searchParams', 'filters', 'and_keywords']).push('123')) 

console.log(newState) 

兩者都應該:

const Immutable = require('immutable') 

const initialState = Immutable.fromJS({ 
    searchParams: { 
    limit: 100, 
    page: 1, 
    order_by: 'name', 
    filters: { 
     and_keywords : [] 
    } 
    }, 
}) 

const newState = initialState.updateIn(['searchParams', 'filters', 'and_keywords'], arr => arr.push('123')) 

console.log(newState) 

setIn版本代碼應與一個小的修改工作,以及輸出:

Map { "searchParams": Map { "limit": 100, "page": 1, "order_by": "name", "filters": Map { "and_keywords": List [ "123" ] } } } 
+0

是的。這是導致問題的另一個錯誤。接受答案仍然供其他人使用。謝謝! –

相關問題