Как обновить одну часть состояния после обновления другой части состояния?

Как корректно обновить часть объекта state из редуктора после диспетчера действия в Redux?
  • 28 декабря 2023 г. 9:57
Ответы на вопрос 2
В Redux есть несколько способов обновить состояние после обновления другой части состояния.

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

Например, если у вас есть состояние `user` и `posts`, и вы хотите обновить `posts` после изменения `user`, вы можете создать комбинированный редуктор, который будет принимать состояния `user` и `posts` и возвращать обновленное состояние `posts`.

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

Например, если вы хотите обновить состояние `posts` после изменения состояния `user`, вы можете создать middleware, который будет слушать изменения в `user` и внесет необходимые изменения в `posts`.

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

Например, если у вас есть состояния `user` и `posts`, и вы хотите обновить `posts` после изменения `user`, вы можете создать селектор, который будет получать данные из состояния `user` и затем использовать эти данные для обновления `posts`.

Обновление части состояния после обновления другой части состояния зависит от ваших конкретных требований, поэтому выбор определенного подхода будет зависеть от контекста вашего приложения.
Неправильно так делать. 
Стейт должен меняться только как результат действий экшенов.
Лучше сделать эффект, который будет слушать экшен, брать данные из стейта и вычислять новое состояние сразу для всего. А потом отправит экшен изменения стейта.
Похожие вопросы