Могу ли я опустить Редуктор? - PullRequest
0 голосов
/ 22 марта 2019

Я использую Redux и Redux Saga в проекте.И я создаю систему уведомлений для приложения.Итак, если какая-либо из Sagas вызывает действия об успешном или неудачном выполнении, будут показаны уведомления об успехе или неудаче.

Я добавил (вызвал) функцию уведомления в Redux Saga.

SHOW_NOTIFICATION - action
showNotificationSaga = () => { notify({ message: 'Bla Bla' }) };

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

Это нормально?Или анти-паттерн?

Спасибо

Обновление:

Другим подходом может быть прямой вызов notify() из других саг.

Например:

sagaForLogin(){
...catch(){
      notify({});
  }
}

Любая рекомендация?

Ответы [ 2 ]

1 голос
/ 26 марта 2019

Если вам не нужно состояние, тогда вам не нужен редуктор

Я цитирую Бена, потому что он прав.

Различные саги используют действия, чтобы общаться между ними и инициировать себя. Таким образом, действия имеют не только классическое значение обновления состояния, но и работают как события связи / триггера. Действия становятся событиями в чисто управляемом событиями стиле (который был реализован Resux-Saga).

0 голосов
/ 26 марта 2019

Если сага не приводит к изменению состояния, то, возможно, даже сама сага не нужна. Если у вас есть некоторые индикаторы для успешных / неудачных действий, например, isFetching и didInvalidate, как в примере веб-сайта Redux , вы можете создать реквизит через mapStateToProps, чтобы позволить вашему компоненту определять, когда и что показывать уведомления:

const mapStateToProps = (state) => ({
    // passing indicators directly
    isFetching: state.myReducer.isFetching,
    didInvalidate: state.myReducer.isFetching
    // or compose into meaningful props
    somethingWrong: !state.myReducer.isFetching && state.myReducer.didInvalidate
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...