redux-saga takeEvery只用setTimeout调用

时间:2016-06-16 21:08:33

标签: javascript redux redux-saga

我有一个容器,可以调度以下操作:

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); 

1 个答案:

答案 0 :(得分:0)

你什么时候打电话给render功能? 如果在sagaMiddleware.run(rootSaga);之后调用渲染函数,它应该适用于this.props.getPageTree的延迟调用。