我已经考虑了传奇的结构并且采用了一种方法,但不知道它是否正确。
例如,我有多个saga文件,对于每个典型的saga文件,有一个观察者传奇“同时”观看不同的动作,然后我们只需要导出这个观察者传奇默认。
这是我的尝试性方法:
我不确定我对观察者传奇的分组方式
/**
* saga.js
*
* one watcher saga watch multiple actions concurrently
* However, from my research, I can only see that everyone seems to create
* multiple watcher sagas, and each watcher only watch single action which is
* sort of verbose
*/
function* watchSomething() {
yield all([
takeLatest(GET_SOMETHING, callGetSomething),
takeLatest(GET_SOMETHING_2, callGetSomething_2),
takeLatest(GET_SOMETHING_3, callGetSomething_3),
]);
}
export default watchSomething;
和
/**
* rootSaga.js
*
* import different watcher sagas from different saga.js files
*/
export default function* root() {
yield all([
watchSomething(),
watchSomething_2(), // the others ...
]);
};
答案 0 :(得分:0)
我不确定我对守望者传奇的分组方式
通常redux-saga
是异步进程管理器,允许以不同的方式操作订阅和发出事件。
最简单的方法是使用takeEvery
/ takeLatest
函数,然后saga
process manager将自动运行独立进程(正式勾选回调域,因为ES是单线程的)每个陷入困境的行动。
但是您可以轻松地生成自己的saga
- 按fork
效果处理,并以自定义方式操作。如果许多操作的操作控制流程相同,则可以运行生成器循环并进行后续处理:
function * manyActionsSaga() {
let flowPromise = Promise.resolve();
while(true) {
const action = yield take(['ACTION_1', 'ACTION_2', 'ACTION_3']);
yield call(() => flowPromise)
flowPromise = flowPromise.then(() => {
// Similar event handling
})
}
}
当然,您也可以为每个操作组设置一个处理函数,然后分别使用目标参数bind
。