Верно ли, что RESET_SCREEN хорош, потому что он не изменяет состояние
Да, это правильно.
однако часть MODIFY_ITEMплохо, потому что он мутирует
Нет, MODIFY_ITEM
не изменяет состояние:
Эта строка: state.items[itemId].item = action.item;
мутирует объект (не состояние), но redux
не заботится о локальной мутации объекта - он даже не узнает.
Пока вы возвращаете новую ссылку - новую копию объекта, redux
считает ее действительным новым состоянием.
Итак, согласно приставке,
Это мутация состояния:
case MODIFY_ITEM:
let itemId = state.item.id;
state.items[itemId].item = action.item;
return state; // <-- because you are returning the same reference. BAD
Это не мутация состояния:
case MODIFY_ITEM:
let itemId = state.item.id;
state.items[itemId].item = action.item;
return Object.assign({}, state, {items: state.items}); // <- A new Object. GOOD
Возможно, вы захотите прочитать омелкая проверка и мутация состояния здесь .