2017-09-27 7 views
0

でオブジェクトにネストされた配列は、だから、私はアクションがトリガされたとき更新は不変な方法

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

私はand_keywordsの配列にオブジェクトをプッシュしたい更新したいと思い、この減速機を持っています。私がこれまで行ってきたことは、この

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

は私もhttps://facebook.github.ioに文書から基づか

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

を試してみましたが、私はそれを動作させるように見えることはできません。変更は

+0

変更不能なオブジェクトは変更されず、変更しているものを再割り当てする必要があります。ですから、行の先頭に 'state ='を追加すれば動作します。 – IronWaffleMan

+0

私は自分のコードのスニペットを掲示したので、私はすでに 'function 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.updateIn(['searchParams', 'filters', 'and_keywords'], arr => arr.push('123')) 

console.log(newState) 

あなたsetInバージョンコードは、小さな変更でも同様に動作するはずです:

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) 

どちらべき出力:

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

うん。この問題を引き起こしたのはもう一つのバグでした。他の人が参照できるように答えを受け入れました。ありがとう! –

関連する問題