2016-06-16 7 views
0

호출 내가 가지고있는 다음과 같은 작업을 전달 컨테이너 : (이에 소품 컨테이너를 통해 전송되는) 내가 추가 한 내 구성 요소에서REDUX-사가 takeEvery 만의 setTimeout

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 제대로를 사용하여 호출 구성 요소에 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

getPageTree (siteId)는 무엇을 반환합니까? setTimeout을 적용하면 무엇을 의미합니까? – baisang

+0

@baisang pageTree를 얻기 위해 action 객체를 반환하는 액션 생성자입니다. 문제는 사가 (saga) 전에 컴포넌트 메소드가 호출된다는 사실과 관련이 있다고 생각합니다. setTimeout을 사용하면 함수가 실행되기 전에 다른 프로세스가 완료 될 수 있습니다. 이 문제를 현재 어떻게 해결할 지 모르겠습니다. – Trace

+0

setTimeout() 및 getPageTree (siteId)의 액션 출력이 같은 형식입니까? – baisang

답변

0

이 때 render 함수를 호출 했습니까? sagaMiddleware.run(rootSaga); 뒤에 렌더 함수가 호출되면 this.props.getPageTree의 지연된 호출이 작동해야합니다.