我有一个容器,可以调度以下操作:
const mapDispatchToProps = (dispatch, ownProps) => {
return {
getPageTree: (siteId) => {
dispatch(getPageTree(siteId));
}
}
}
const explorer = connect(
mapStateToProps,
mapDispatchToProps
)(Explorer);
在我的组件中(通过容器向其发送道具)我已添加:
componentWillMount(){
setTimeout(() => this.props.getPageTree());
}
传奇:
function* fetchPageTree(action){
try{
const data = yield call(Api.fetchPageTree, action.payload.url);
yield put({type: 'FETCH_SUCCEEDED', data});
}catch(error){
yield put({type: 'FETCH_FAILED', error})
}
}
export function* watchFetchData(){
console.log('watch');
yield* takeEvery('GET_PAGETREE', fetchPageTree);
console.log('finish watch');
}
在组件中应用fetchPageTree
时,传奇观察者使用takeEvery
正确调用setTimeout
,但没有执行fetchPageTree
。
也没有错误被抛出。
有关原因的任何想法?
编辑:
index.es6文件包含以下初始化逻辑,但总体标准:
const sagaMiddleware = createSagaMiddleware();
const store = createStore(
appReducers, //Combined reducers
applyMiddleware(sagaMiddleware)
);
render(
<Provider store={store}>
<App />
</Provider>,
document.getElementById('zp-app')
)
sagaMiddleware.run(rootSaga);
答案 0 :(得分:0)
你什么时候打电话给render
功能?
如果在sagaMiddleware.run(rootSaga);
之后调用渲染函数,它应该适用于this.props.getPageTree
的延迟调用。