Задать вопрос
@vixxxx2

Как в Redux осуществить подписку?

Использую redux-thunk middlware
Собственно есть некоторые компонент автономные и нужно как то отслеживать их изменения
Плодить условия в них не хочется тк модульность все дела
Но нужно как то отслеживать action
Пока временно просто сделал маленькую middlware но как мне кажется это путь вникуда
const boardMiddleware = store => next => action => {
  if (action.type.includes('CLOSE_MODAL') && (
    action.payload === 'modal1' ||
    action.payload === 'modal2' ||
    action.payload === 'modal3'
  )) {

    switch (action.payload) {
      case 'modal1':
        store.dispatch(boardAction({ modal1: true }));
        if(!store.getState().auth) {
          store.dispatch(openModalAction('modal3'));
        }
        break;
      case 'modal2':
        store.dispatch(onboardAction({ modal2: true }));
        if(!store.getState().auth) {
          store.dispatch(openModalAction('modal3'));
        }
        break;
      case 'modal3':
        store.dispatch(boardAction({ modal3: true }));
        break;
    }

    return next(action);
  } else {
    return next(action);
  }
};


Какие для этого есть ходы выходы или библиотеки
Всем спасибо
  • Вопрос задан
  • 286 просмотров
Подписаться 1 Средний Комментировать
Пригласить эксперта
Ответы на вопрос 2
Если я правильно понял, то суть вопроса, как по одному экшену вызывать другой?

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

И по факту, это более корректно с точки зрения консистентности состояния. В случае когда у вас происходит два действие (отдельно закрывается первая модалка, затем отдельно открывается вторая), приложение миг времени находится в состоянии, когда модалка не открыта не одна. Хотя с точки зрения бизнес логики такого состояния не бывает. В данном случае это не проблема, но в общем случае может приводить к проблемам.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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