2017-07-06 65 views
1

好吧,所以从Hello World教程https://redux-saga.js.org/docs/introduction/BeginnerTutorial.html工作我的方式,我试图建立一个非常简单的fetch调用......只是我的生成器函数永远得不到执行。Redux-Saga takeEvery不叫传奇

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

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的devtools,我希望调试器停止我的代码,并通过fetchData函数指引我...但没有任何反应。

我敢肯定我错过了一些非常简单的东西 - 你能帮我吗?

编辑:

事实证明,如果我移动devTools增强剂的compose结束,一切工作正常。

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

现在我知道,造成的compose签名依赖于提交给它的最后一个函数,这仍然是有些不清楚,我...有人可以澄清这是怎么回事?

回答

1

尝试以这种方式

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