redux-saga - 将 node_modules 中的 saga 导入并与其他 saga 结合

Hov*_*dko 3 redux-saga

有什么方法可以将 node_modules 中的 saga 与我为我的应用程序编写的其他 saga 结合起来?如果sagaMiddleware.run()可以接受传奇数组,那将是有道理的,但 id 不

我在 node_modules 中有 npm 模块,它有这个传奇。

// node_modules/module/rootSaga.js
import { takeLatest } from 'redux-saga/effects'
import { createUserSaga } from './sagas/usersSagas'

export default function* usersModuleMernSagas() {
    yield takeLatest('CREATE_USER_REQUEST', createUserSaga)
}
Run Code Online (Sandbox Code Playgroud)

我的商店看起来像这样

// store.js
import { applyMiddleware, createStore } from 'redux'
import createSagaMiddleware from 'redux-saga'
import { routerMiddleware } from 'react-router-redux'
import history from 'history-module-mern'

import rootSaga from 'module/rootSaga'  // this is taht import from node_modules
import rootReducer from './rootReducer'
const sagaMiddleware = createSagaMiddleware()
const historyMiddleware = routerMiddleware(history)
const middleware = applyMiddleware(sagaMiddleware, historyMiddleware)

export const store = createStore(
    rootReducer,
    window.__REDUX_DEVTOOLS_EXTENSION__ && window.__REDUX_DEVTOOLS_EXTENSION__(),
    middleware
)

sagaMiddleware.run(rootSaga) //this can run only one saga
Run Code Online (Sandbox Code Playgroud)

And*_*aci 7

为了将多个传奇传递给sagaMiddleware.run()您,您需要创建一个单独的生成器,您将在其中生成所有传奇。

您可以在下面看到我的示例,其中包含 2 个传奇:

// sagas.js

import { all, fork } from "redux-saga/effects";
import appSagas from "./App";
import authSagas from "./Auth";

export default function* () {
  yield all([
    fork(appSagas),
    fork(authSagas)
  ]);
}
Run Code Online (Sandbox Code Playgroud)

然后我将我的生成器函数导入 assagas并将其作为一个参数传递给sagaMiddleware.run()这样的:

// index.js

import sagas from "./sagas";

sagaMiddleware.run(sagas);
Run Code Online (Sandbox Code Playgroud)