Ответ вслух Junior Объекты и массивы обновлено

Зачем неизменяемость

Вопрос

Почему во фронтенде принято не мутировать данные?

Попробуйте сами

Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.

Показать ответ и разбор

Коротко

Если объект не мутируют, факт изменения виден по смене ссылки - сравнение prev !== next становится проверкой за константу. На этом держатся React.memo, useMemo, селекторы Redux и PureComponent.

Что должно прозвучать в ответе

  • сравнение по ссылке становится дешёвой проверкой изменения

  • React и мемоизация опираются на смену ссылки

  • мутация общего объекта даёт эффекты на расстоянии

  • неизменяемость даёт историю состояний - undo, time travel

  • цена: лишние аллокации, поэтому копируют только путь изменения

Что могут спросить следом

  • Как неизменяемо удалить элемент из массива внутри объекта
  • Что такое структурное разделение
  • Почему sort и reverse опасны в React

Разбор

Если объект не мутируют, факт изменения виден по смене ссылки - сравнение prev !== next становится проверкой за константу. На этом держатся React.memo, useMemo, селекторы Redux и PureComponent.

Мутация общей структуры даёт эффекты на расстоянии: два компонента держат одну ссылку, один поменял - второй не перерисовался, потому что ссылка та же. Плюс неизменяемость бесплатно даёт историю состояний.

Цена - аллокации, поэтому копируют не всё дерево, а только путь до изменённого узла.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.