foundation

Иммутабельность

Используйте structural sharing и иммутабельные обновления, чтобы change detection, история и отладка оставались надёжными.

Иммутабельные обновления возвращают новые ссылки на изменённые ветки и разделяют неизменённые поддеревья (structural sharing). React, Redux и time-travel опираются на неравенство ссылок для обнаружения изменений.

					const state = { user: { id: 'u1' }, prefs: { theme: 'dark' } };
const next = {
  ...state,
  prefs: { ...state.prefs, theme: 'light' },
};
// state !== next; state.user === next.user
				

Redux Toolkit через Immer позволяет писать reducer «как с мутацией», получая иммутабельный результат. MobX часто мутирует observables напрямую — другая модель изменений, та же потребность в явных границах обновления.

Компромисс: предсказуемый change detection и time-travel debugging против стоимости аллокаций и многословных обновлений.

На интервью: какие ссылки меняются после вложенного update; объясните structural sharing.

Типовые ошибки: in-place `sort`/`splice` массива, мутация вложенных объектов в `useState`, shallow spread с общими внутренними объектами, которые потом мутируют.

Чеклист:

  • Заменяйте изменённые ветки; остальное разделяйте.
  • Копируйте массивы/объекты перед in-place методами.
  • Immer или утилиты для глубоких деревьев.
  • Проверяйте допущения о равенстве ссылок в селекторах.