我可以省略Reducer吗?

时间:2019-03-22 04:26:38

标签: redux react-redux redux-saga

我在一个项目中使用Redux和Redux Saga。我正在为该应用程序创建一个通知系统。因此,如果Sagas中有任何一个调用成功或失败操作,则会显示带有成功或失败通知。

我已将(称为)通知功能放入Redux Saga中。

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

我没有任何理由在这里创建减速器。我的意思是,我没有任何状态可以维护通知。因此,我正在考虑为此不添加任何减速器。

这样可以吗?还是反模式?

谢谢

更新:

另一种方法可能是直接从其他sagas调用notify()

例如:

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

有什么建议吗?

2 个答案:

答案 0 :(得分:1)

  

如果您不需要状态,那么就不需要减速器

我引用Ben是因为他是对的。

各种Sagas使用动作在它们之间进行通信并触发自己。因此,这些动作不仅具有更新状态的经典含义,而且还可以作为通信/触发事件来工作。动作变成纯事件驱动的开发风格(由Resux-Saga强制执行)的事件。

答案 1 :(得分:0)

如果英雄传奇不会导致任何状态更改,那么甚至不需要英雄传奇本身。如果您有一些成功/失败措施的指标,例如isFetchingdidInvalidate就像Redux website's example一样,您可以通过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
})