Зачем неизменяемость
Вопрос
Почему во фронтенде принято не мутировать данные?
Попробуйте сами
Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.
Показать ответ и разбор
Коротко
Что должно прозвучать в ответе
сравнение по ссылке становится дешёвой проверкой изменения
React и мемоизация опираются на смену ссылки
мутация общего объекта даёт эффекты на расстоянии
неизменяемость даёт историю состояний - undo, time travel
цена: лишние аллокации, поэтому копируют только путь изменения
Что могут спросить следом
- Как неизменяемо удалить элемент из массива внутри объекта
- Что такое структурное разделение
- Почему sort и reverse опасны в React
Разбор
Если объект не мутируют, факт изменения виден по смене ссылки - сравнение prev !== next
становится проверкой за константу. На этом держатся React.memo, useMemo,
селекторы Redux и PureComponent.
Мутация общей структуры даёт эффекты на расстоянии: два компонента держат одну ссылку, один поменял - второй не перерисовался, потому что ссылка та же. Плюс неизменяемость бесплатно даёт историю состояний.
Цена - аллокации, поэтому копируют не всё дерево, а только путь до изменённого узла.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.