reactjs - 多个文件中的 redux-sage sagas
问题描述
我在多个文件中有多个 saga,我需要将它们组合成一个 rootSaga。
在 saga1.js 中
function* fetchStores() {
// API call
}
function* fetchStore(action) {
// Another API call
}
export default function* storeSagas() {
yield all([
fork(actions.GET_STORES, fetchStores),
fork(actions.GET_STORE, fetchStore)
]);
}
在 saga2.js 中
function* fetchItems() {
// API call
}
function* fetchItem(action) {
// Another API call
}
export default function* itemSagas() {
yield all([
fork(actions.GET_ITEMS, fetchItems),
fork(actions.GET_ITEM, fetchItem)
]);
}
在 sagas.js 中
export default function* rootSaga() {
yield all([
storeSagas(),
itemSagas()
]);
}
在 store.js 中
const sagaMiddleware = createSagaMiddleware();
const store = createStore(
combineReducers({
...reducers
}),
applyMiddleware(sagaMiddleware, logger)
);
sagaMiddleware.run(rootSaga);
这是行不通的。我认为减速器和操作工作正常。我猜这不起作用,因为 yield 或 fork 或 takeEvery 等。
任何帮助表示赞赏。
解决方案
叉子
fork(actions.GET_ITEMS, fetchItems)
首先,用于 fork 的语法是错误的。fork 将第一个参数作为函数,将第二个参数作为要传递给该函数的参数。
fork(fetchItems,actions.GET_ITEMS)
fork 用于执行非阻塞任务并返回 Task 对象。
拿每个
takeEvery
允许处理并发操作。它将把模式、传奇函数和参数传递给启动的任务。
yield takeEvery(actions.GET_STORES, fetchStores)
在您的代码中,只需用 the 替换fork
它takeEvery
,它就会按预期工作。
推荐阅读
- vb.net - 从 MS SQL varbinary 保存本地文件
- mysql - 将 4 个表连接在一起并检查总数不匹配的位置
- javascript - 将 Onclick 按钮事件更改为页面加载 Javascript
- java - 如何避免请求的资源上不存在 Access-Control-Allow-Origin 标头
- javascript - 使用 body.json() 解析来自 http.get() 的响应时出错
- esp32 - micropython ds18x20 错误的 rom/地址/序列号
- reactjs - 有没有办法解决这个条件挂钩解决方法?
- swift - 手动将 JSON 解析为 Struct 的对象
- c++ - 为什么我在使用 memset 用零填充对象后在 dynamic_cast 出现异常
- linux - 将NA字符串替换为连续日期linux的方法