Redux-Saga采取的不是所谓的传奇

时间:2017-07-06 10:45:19

标签: javascript redux redux-saga

好的,所以,在https://redux-saga.js.org/docs/introduction/BeginnerTutorial.html的Hello World教程中,我正在尝试构建一个非常简单的提取调用...只是我的生成器函数永远不会被执行。

相关代码如下所示,现在只是用于测试目的的控制台日志记录:

export function* fetchData() {
  debugger;
  console.log('Fetching data');
}

export function* fetchDataWatcher() {
  console.log("watching");
  yield takeEvery('FETCH_REQUESTED', fetchData);
}    

// single entry point to start all Sagas at once
export default function* rootSaga() {
  yield all([
    fetchDataWatcher()
  ]);
}

当然,我在index.js

中实现了样板
import rootSaga from './sagas';
...

const sagaMiddleware = createSagaMiddleware();
...
const enhancers = 
  compose(
    window.devToolsExtension ? window.devToolsExtension() : f => f,
    applyMiddleware(sagaMiddleware)
  );

const store = createStore(
  combineReducers({
   ...
  }),
  defaultState,
  enhancers
);

sagaMiddleware.run(rootSaga);

在浏览器控制台中,我看到一个人正在观看',但是当我发出一个动作时

{
type: 'FETCH_REQUESTED'
}

通过Redux的开发工具,我希望调试器停止我的代码并引导我完成fetchData功能......但没有任何反应。

我确定我在这里错过了一些非常简单的东西 - 你能帮帮我吗?

修改

原来,如果我将devTools增强器移到compose的末尾,一切正常。

const enhancers = 
  compose(
    applyMiddleware(sagaMiddleware),
    window.devToolsExtension ? window.devToolsExtension() : f => f
  )

现在我知道compose的结果签名取决于提交给它的最后一个函数,对我来说有点不清楚......有人可以澄清发生了什么吗?

1 个答案:

答案 0 :(得分:2)

尝试以这种方式创建rootSaga

export default function * root () {
  yield [
    fetchDataWatcher()
  ]
}