首页 > 解决方案 > 多个文件中的 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 等。

任何帮助表示赞赏。

标签: reactjsreduxredux-saga

解决方案


叉子

fork(actions.GET_ITEMS, fetchItems)

首先,用于 fork 的语法是错误的。fork 将第一个参数作为函数,将第二个参数作为要传递给该函数的参数。

fork(fetchItems,actions.GET_ITEMS)

fork 用于执行非阻塞任务并返回 Task 对象。

拿每个

takeEvery允许处理并发操作。它将把模式、传奇函数和参数传递给启动的任务。

yield takeEvery(actions.GET_STORES, fetchStores)

在您的代码中,只需用 the 替换forktakeEvery,它就会按预期工作。


推荐阅读