什么是 Redux saga 的更好结构
what is a better structure for Redux saga
我想过saga的结构,想出了一个办法,不知道对不对。
比如我有多个saga文件,对于每个典型的saga文件,都有一个watcher saga监视不同的动作"concurrently",然后我们只需要默认导出这个watcher saga即可。
这是我的初步做法:
我不确定我对 watcher sagas 进行分组的方式
/**
* 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 ...
]);
};
I am not sure abot the way I group the watcher sagas
通常 redux-saga
是异步进程管理器,允许以不同的方式处理订阅和发出事件。
最简单的方式就是使用takeEvery
/takeLatest
函数,然后saga
process manager会自动运行独立进程(正式勾选回调域,因为ES是单-threaded) 每个被困动作。
但您可以通过 fork
效果轻松生成自己的 saga
-process,并以自定义方式操作操作。如果许多操作的操作控制流相同,您可以 运行 生成器循环进行后续处理:
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
分别带上目标参数
我想过saga的结构,想出了一个办法,不知道对不对。
比如我有多个saga文件,对于每个典型的saga文件,都有一个watcher saga监视不同的动作"concurrently",然后我们只需要默认导出这个watcher saga即可。
这是我的初步做法:
我不确定我对 watcher sagas 进行分组的方式
/**
* 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 ...
]);
};
I am not sure abot the way I group the watcher sagas
通常 redux-saga
是异步进程管理器,允许以不同的方式处理订阅和发出事件。
最简单的方式就是使用takeEvery
/takeLatest
函数,然后saga
process manager会自动运行独立进程(正式勾选回调域,因为ES是单-threaded) 每个被困动作。
但您可以通过 fork
效果轻松生成自己的 saga
-process,并以自定义方式操作操作。如果许多操作的操作控制流相同,您可以 运行 生成器循环进行后续处理:
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
分别带上目标参数