2017-09-26 17 views
0

リアクションコンポーネントが正しく更新されていても再レンダリングに問題があります。私はreduxを使用している、私は状態の変異を読むことが多い問題/これの原因は、私はそれをやっていると思っていない。私が更新している値は、その状態の中で3レベル深くネストされています。ここでReact/Reduxコンポーネントが再レンダリングされない

コードです:Object.assign

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

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

[RECEIVE_CURRENT_SCAN_RESULT]: (state, payload) => 
    Object.assign({}, state, { 
     currentScanResult: 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; 
    } 
} 
+0

あなたの質問に非常に小さな編集を提案し、提案されたsolotionで回答を投稿しました(Stackoverflowに質問の 'javascript'タグが必要です。そうでなければ、構文が高いのでライティングが機能しません。投稿された回答のコードは、色のない灰色のテキストのように見えます)。 – jonahe

+0

PS。私はちょうど答えを明確にしました。 – jonahe

答えて

1

最初の引数は、 "ターゲット" オブジェクトであるので、このライン

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

はまだ上currentScanResultプロパティを変異され、

状態。

あなたが最初のレベルで行ったように、全体のことになるので、Object.assignに最初の引数として空のオブジェクトを使用します。

// empty object as target here 
Object.assign({}, state, { 
    // empty object as target here as well 
    currentScanResult: Object.assign({}, state.currentScanResult, payload) 
}) 

及びそのはず、少なくともテスト問題は、突然変異の問題である場合または修正する必要がある他のものがある場合。

+0

それは働いているようです、ありがとう、私は吸う。 – BC00

+0

それはうまく聞こえます!あなたは吸うことはありません!学習が難しい場合もあります(もしStackoverflowが存在しないのであれば簡単です)。あなたが何かをうまく学んだとしても、そのような小さな間違いを作るのは簡単です。 – jonahe

関連する問題