簡體   English   中英

Redux Reducer - 如何在不改變狀態的情況下更新對象值?

[英]Redux Reducer - How to update an object value without mutating the state?

我的減速機看起來像這樣:

  const players = (state = {}, action) => {
    switch (action.type) {
      case 'UPDATE_PLAYERS_CARDS':
        return Object.assign({}, state, {
          [action.player]: {
            name: state[action.player].name,
            score: state[action.player].score,
            cards: action.cards
          }
        })
       default:
         return state
    }
  }

  export default players

基本上,我只想更新球員卡,但如果我不包括名稱和分數,那么這些將在新狀態下被刪除。

理想情況下,我需要做這樣的事情: state[action.player].cards = action.cards但其中一條規則是永遠不要改變狀態

上面的方法可行,但這需要我總是知道數據結構,所以如果我將來添加其他東西,我需要記得回到這個reducer並重新添加,所以我不會丟失它。

有沒有更好的方法來實現這一目標?

編輯:感謝Vijay提出多個對象分配的建議。 我最終得到了這個:

case 'UPDATE_PLAYERS_CARDS':
  const playerObject = Object.assign(state[action.player], { cards: action.cards });
  return Object.assign({}, state, {
    [action.player]: playerObject
  });

那個怎么樣? 如果我能做出任何改進,請告訴我。

多個Object.assign方法看起來很丑陋。

你可以做:

return { ...state.action.player, cards: action.cards }

注意:您需要使用stage-2 babel預設來使用它。

一旦要更新的數據結構變得相當復雜,您可以使用ImmutableJSsetInupdateIn方法輕松進行深度更新

多個Object.assign可能會有所幫助:

const newState = Object.assign({}, state);
Object.assign(newState.action.player, { cards: action.cards });

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM