2017-10-22 3 views
0

reduxstateを正しく更新する方法がわかりません。私は重複したエントリーを得る。私の減速の1Reduxの状態を正しく更新する方法がわかりません

export default function reducer(state = STATE, action) { 
    switch (action.type) { 
     case type.WINDOW_ONE: { 
      return { 
       ...state, 
       windowOne: { 
        ...state.windowOne, 
        foo: action.bar, 
       } 
      } 
     } 
    } 
} 

あるstate

const STATE = { 
    windowOne: { ... } 
    windwoTwo: { ... } 
    windowThree: { ... } 
} 

どのように見えるか

ザッツ私は私のコンポーネント

function mapDispatchToProps(dispatch) { 
    return bindActionCreators(combinedActions, dispatch); 
} 

const mapStateToProps = state => { 
    const { windowOne } = state.windowOne; 

    return { 
     windowOne, 
    }; 
} 

export default connect(mapStateToProps, mapDispatchToProps)(SomeComponent); 

そして私の小道具に似状態をマップここに様々な減速機を組み合わせる

redux-loggerを使用すると、windowOneにはstateの全体がコピーされています。そこで、actionをトリガーした後、windowTwowindowThreeが見つかりました。また、私はないconst { windowOne } = stateは十分なはずこれらの行

const { windowOne } = state.windowOne; 

windowOneを指定する必要がなぜわかりませんか?それは関連するかもしれません...

答えて

0

combineReducersdocsを確認してください。それぞれの減速機に状態の適切なスライスを送信し、結果をマージします。この後

export default function reducer(state = STATE.windowOne, action) { 
    switch (action.type) { 
     case type.WINDOW_ONE: { 
      return { 
       ...state, 
       foo: action.bar, 
      } 
     } 
    } 
} 

const { windowOne } = statemapStateToPropsで作業する必要があります示した減速機の場合、これはあなただけwindowOneのためにそれを初期状態に合格し、windowOneのためだけで更新された状態を返すべきであることを意味します。すべてのレデューサーがすべてのアクションを受け取り、STATEという名前は、より適切にはinitialStateと命名される可能性があるため、各レデューサーにデフォルトのケースが必要であることにも注意してください。

+0

私は前にこのようにしていました。しかし、私は 'windowOne'、' windowTwo'と 'windowThree'の間でデータを交換する必要があるので、私が書いたコードに変更しました。私は私の '減量主義者 'を'州家'全体に渡して、 'windowOne'部分だけを返すと思った。それは 'state'を更新し、新たに作成されたデータは' STATE'を渡す別の 'reducer'でアクセス可能です。 'STATE.windowOne'で、私は更新データにアクセスできるはずですか? – Stophface

+0

'combineReducers'を使用すると、渡して状態全体を返すと、各最上位の状態プロパティに入れ子になったコピーが作成されます。おそらく、単一のレデューサーを使用するか、「reduce-reducers」のようなパッケージを使用したいと思うかもしれません(combinedReducersを超えて)(http://redux.js.org/docs/recipes/reducers/BeyondCombineReducers.html#スライスレデューサー間の共有データ)。 – Oblosys

関連する問題