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)
The [...state.roundHistory] here is similar to [].concat(state.roundHistory). It's creating a new array, but the objects in the array are shared with state.roundHistory. If you want to mutate them you'll need to make copies of each item.
You can do this using Object.assign, similar to how what you did for your return value:
var archive = state.roundHistory.map(value => Object.assign({}, value));
Or (as you suggested in your own answer), you can use object-spread notation:
var archive = state.roundHistory.map(value => {...value});
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
});