Ответ
Плюсы:
- Предсказуемость — состояние не меняется, создаются новые объекты
- Легче отслеживать изменения (можно сравнивать по ссылке)
- Упрощает отладку (история изменений сохраняется)
- Совместимость с PureComponent/React.memo
- Потокобезопасность (важно для многопоточных сред)
Минусы:
- Производительность — создание новых объектов требует памяти
- Сложность обновления глубоко вложенных структур
- Больше boilerplate-кода (особенно без библиотек типа Immer)
Пример с Redux reducer:
// mutable (плохо)
function reducer(state, action) {
state.items.push(action.payload); // мутация!
return state;
}
// immutable (правильно)
function reducer(state, action) {
return {
...state,
items: [...state.items, action.payload]
};
}