@DenJel

Side Effects после исполнения reducer'a?

Здравствуйте, изучаю Redux. Как я понял любые асинхронные действия и сайд эффекты должны происходить в мидлваре. Но Если допустим ты изменил state в рудьюсере и хочешь тут же его сохранить в БД ( ну или какую то его часть, не суть). Как быть тогда? Как то я не понимаю логики. Почему редьюссер замыкает цепочку изменения стейта? Объясните, пожалуйста. Можно на примере localStorage. Спасибо.
  • Вопрос задан
  • 845 просмотров
Решения вопроса 1
Редьюсер не замыкает цепочку изменения стейта. От получает экшн и возвращает новый стейт. По сути только редьюсер можно "изменять" стейт.
Сохранение данных в localStorage - это тоже сайд эффект, и оно должно происходить в мидлваре.

Например, с redux-thunk:
const asyncAction = () => {
  return (dispatch, getState) => {
    localStorage.setItem('state', JSON.stringify(getState()))
    return dispatch(someAction())
  }
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
maxfarseer
@maxfarseer
https://maxpfrontend.ru, обучаю реакту и компании
Как я понял любые асинхронные действия и сайд эффекты должны происходить в мидлваре.

Не совсем согласен. В action creators тоже можно практически безнаказанно провернуть какой-нибудь side-effect (сохранить токен в localStorage, например, после LOGIN_SUCCESS).
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы