2017-09-23 19 views
0

私は反応するのが新しい/ reduxであり、私のオブジェクトの1つを還元状態でマップ/ハッシュとしてキーからオブジェクトのプライマリキーとして保存しようとしていますオブジェクトそのものです。しかし、私が更新するたびに状態は無効になっているように見えますが、追加している新しい値だけが残っています。私はちょうど私のオブジェクトに渡したいネストされた状態の問題を反応させる/還元する

import { RECEIVE_CURRENT_SCAN_RESULT } from '../constants'; 

const initialState = { 
    currentScanResult: {info:{}, results:[]}, 
}; 

export default createReducer(initialState, { 
    [RECEIVE_CURRENT_SCAN_RESULT]: (state, payload) => 
     Object.assign({}, state, { 
      currentScanResult: payload 
     }) 

}); 


export function createReducer(initialState, reducerMap) { 
    return (state = initialState, action) => { 
     const reducer = reducerMap[action.type]; 

     return reducer 
      ? reducer(state, action.payload) 
      : state; 
    } 
} 

:ここに私のコードです

{id: 1, thing: "blue"} 

と状態がそれで更新されています。私が渡した場合、:

{id: 2, thing: "red"} 

私はReduxの状態を反映したいと思います:これを行うには私のための簡単な方法は、

currentScanResult: {1: {id: 1, thing: "blue"}, 2: {id: 2, thing: "red"}} 

ありますか?ネストされた値を更新する場合、reduxは再レンダリングされますか?たとえば、私が渡した場合:

{id: 2, thing: "purple"} 

=> currentScanResult: {1: {id: 1, thing: "blue"}, 2: {id: 2, thing: "purple"}} 

私はこのような動作を見たいと思います。私は不変のJSを見ました。私は、この単純なユースケースをそれなしで動作させることができるかどうか疑問に思っていますか?

ご協力いただきましてありがとうございます。ありがとう!

答えて

2

あなたがstate.currentScanResultをオーバーライドしている

Object.assign({}, state, { 
    currentScanResult: payload 
}) 

を行うと。更新する場合は、

Object.assign({}, state, { 
    currentScanResult: Object.assign({}, state.currentScanResult, payload) 
}) 
+0

ありがとうございます。あなたはそれがこのように入れ子になっている状態で、状態が正しく更新されるかどうか知っていますか?任意の欠点? – BC00

+0

問題ありません。データの入れ子が深ければ、内部構造を更新することになります。詳細については、これらのドキュメントを参照してください。http://redux.js.org/docs/recipes/reducers/ImmutableUpdatePatterns.html – JulienD

+0

はこの変更状態です。何らかの理由で、ネストされた値が更新されたときにコンポーネントが再レンダリングされません。 .. – BC00

関連する問題