Рубрики
Без рубрики

Концепция React: Неизменность

Что такое неизменность? И как это вписывается в современный мир?

Одна из концепций, с которой вы, скорее всего, столкнетесь при программировании в React, – это неизменность (и ее противоположность, изменчивость).

Это спорная тема, но что бы вы ни думали о концепции неизменности, React и большая часть его экосистемы способствуют этому, поэтому вам нужно, по крайней мере, понять, почему это так важно и каковы последствия этого.

В программировании переменная является неизменяемой, если ее значение не может измениться после ее создания.

Вы уже используете неизменяемые переменные, не зная об этом, когда манипулируете строкой. Строки по умолчанию неизменяемы, когда вы меняете их в реальности, вы создаете новую строку и присваиваете ей то же имя переменной.

Неизменяемая переменная никогда не может быть изменена. Чтобы обновить ее значение, вы создаете новую переменную.

То же самое относится к объектам и массивам.

Вместо изменения массива, чтобы добавить новый элемент, вы создаете новый массив путем объединения старого массива и нового элемента.

Объект никогда не обновляется, но копируется перед его изменением.

Это относится к React во многих местах.

Например, вы никогда не должны изменять свойство состояние компонента напрямую, а только с помощью метода setState() .

В Redux вы никогда не изменяете состояние напрямую, а только через редукторы, которые являются функциями.

Вопрос в том, почему?

Существуют различные причины, наиболее важными из которых являются:

  • Мутации могут быть централизованы, как в случае Redux, что улучшает ваши возможности отладки и уменьшает количество источников ошибок.
  • Код выглядит чище и проще для понимания. Вы никогда не ожидаете, что функция изменит какое-то значение без вашего ведома, что дает вам предсказуемость . Когда функция не изменяет объекты, а просто возвращает новый объект, она называется чистой функцией.
  • Библиотека может оптимизировать код, потому что, например, JavaScript работает быстрее при замене ссылки на старый объект на совершенно новый объект, а не при изменении существующего объекта. Это дает вам производительность .

Оригинал: “https://flaviocopes.com/react-immutability/”