我在一个项目中使用Redux和Redux Saga。我正在为该应用程序创建一个通知系统。因此,如果Sagas中有任何一个调用成功或失败操作,则会显示带有成功或失败通知。
我已将(称为)通知功能放入Redux Saga中。
SHOW_NOTIFICATION - action
showNotificationSaga = () => { notify({ message: 'Bla Bla' }) };
我没有任何理由在这里创建减速器。我的意思是,我没有任何状态可以维护通知。因此,我正在考虑为此不添加任何减速器。
这样可以吗?还是反模式?
谢谢
更新:
另一种方法可能是直接从其他sagas调用notify()
。
例如:
sagaForLogin(){
...catch(){
notify({});
}
}
有什么建议吗?
答案 0 :(得分:1)
如果您不需要状态,那么就不需要减速器
我引用Ben是因为他是对的。
各种Sagas使用动作在它们之间进行通信并触发自己。因此,这些动作不仅具有更新状态的经典含义,而且还可以作为通信/触发事件来工作。动作变成纯事件驱动的开发风格(由Resux-Saga强制执行)的事件。
答案 1 :(得分:0)
如果英雄传奇不会导致任何状态更改,那么甚至不需要英雄传奇本身。如果您有一些成功/失败措施的指标,例如isFetching
和didInvalidate
就像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
})