using …spread, but redux still throws warning about state mutation

前端 未结 2 1332
北荒
北荒 2021-01-03 05:46

Redux throws Warning on dispatch:

Error: A state mutation was detected inside a dispatch, in the path: 
roundHistory.2.tickets. Take a look at the reducer(s)         


        
2条回答
  •  没有蜡笔的小新
    2021-01-03 06:27

    Okay i got it. Spreading an array of objects gives a new array but with links to same objects. To avoid the mutation, i added this line: archive[i] = {...state.roundHistory[i]};

    case 'ARCHIVE_TICKETS' :
      var archive = [...state.roundHistory];
      for (var i in archive) {
        archive[i] = {...state.roundHistory[i]};
        if (archive[i]._id === action.roundId) {
          archive[i].tickets = action.data;
        }
      }
      return Object.assign({}, state, {
        roundHistory: archive
      });
    

提交回复
热议问题