新路线的反应样板传奇

react-boilerplate sagas for new route

react-boilerplate的sagas示例中,sagas被导出为一个数组:

export function* defaultSaga() {

}

export default [
  defaultSaga,
];

然后在routes.js中注入默认:

...
injectSagas(sagas.default);
...

但是,当我添加一个新的身份验证路由时,即使我只有默认的 sagas(与上面相同),我也会收到一条错误消息 saga argument must be a Generator function! .

我将路由添加到 routes.js:

//routes.js
export function authRoutes(store) {
  //same code as createRoutes
}

并在app.js中引入了为Router创建新路由的函数:

//app.js
const rootRoute = {
  component: App,
  childRoutes: createRoutes(store),
};

const authRoute = {
  path: '/auth',
  component: Auth,
  childRoutes: authRoutes(store),
};

const routes = {
  childRoutes: [rootRoute, authRoute],
};

当我尝试将 sagas.js 的默认值编辑为:

export default function* root() {
  yield [
    defaultSaga(),
  ];
}

我收到一个错误 injectAsyncSagas: Expected "sagas" to be an array of generator functions。所以我所做的是将 sagas.default 包装在数组中的新路由中:

//routes.js - authRoutes(store)
importModules.then(([reducer, sagas, component]) => {
  injectReducer('login', reducer.default);
  injectSagas([sagas.default]);
  renderRoute(component);
});

为什么会出现这些错误,我该如何解决? (我对 React 和生成器还很陌生。)

哎呀。我忘了我在测试时在 store.js 中调用了 store.runSaga(mySagas),它接受生成器函数数组。我删除了它,错误消失了。