Redux — это библиотека управления состоянием во внешней части веб-приложения. Состояние всего приложения хранится в одном объекте, который называется хранилище.

В игре с редуксом ключевым моментом является то, что называется Неизменяемые объекты.

Что такое неизменяемый объект?

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

Неизменяемые объекты часто используются в ситуациях, когда согласованность и безопасность данных имеют решающее значение, например, в многопоточном или параллельном программировании. Поскольку их нельзя изменить, несколько потоков могут безопасно обращаться к ним, не опасаясь, что один поток изменит объект, пока другой обращается к нему. Кроме того, неизменяемые объекты часто используются в функциональном программировании, где важно избегать побочных эффектов и поддерживать ссылочную прозрачность.

Примеры неизменяемых объектов включают строки, числа и кортежи во многих языках программирования. Напротив, изменяемые объекты — это объекты, состояние которых может быть изменено после создания, например списки, словари и объекты в объектно-ориентированных языках программирования.

Причина использования неизменяемых объектов в редуксе?

Неизменяемые объекты используются в Redux, популярной библиотеке JavaScript для управления состоянием приложения, поскольку они помогают обеспечить предсказуемые и эффективные обновления дерева состояний.

В Redux состояние представлено одним неизменяемым объектом, называемым деревом состояний. Когда действие отправляется для обновления состояния, функция редуктора возвращает новый объект состояния, основанный на предыдущем объекте состояния и действии.

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

Неизменяемые объекты также помогают повысить производительность, позволяя быстро сравнивать ссылки. Когда создается новый объект состояния, он совместно использует как можно больше данных с предыдущим объектом состояния. Это означает, что многие свойства нового объекта будут иметь тот же адрес памяти, что и предыдущий объект, что позволяет быстро сравнивать и сокращать использование памяти.

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