2017-01-02 5 views
0

redux-saga에 대한 단순하고 매우 일반적인 사용 사례처럼 보이는 문제가 있습니다. 내 첫 번째 데이터 세트로 내 redux 저장소를 채우기 위해 API를 호출하려고합니다. 그렇게하기 위해 저는 시작할 때 사가를 실행하려고합니다.Sagas가 다른 Sagas 및 동작을 실행하지 않음

store.js의 관련 부분은 다음과 같습니다 나는 API에 요청을 볼 수있는 페이지가로드

export function* fetchListings() { 
    try { 
    console.log('fetchListings saga - try') 
    const response = yield call(api.get, '/api/listings') 
    console.log(response.data.listings) 
    yield put({type: 'FETCH_LISTINGS_SUCCESS', listings: response.data.listings}) 
    } 
    catch (err) { 
    console.log('fetchListings saga - error') 
    yield put({type: 'FETCH_LISTINGS_ERROR', error: err}) 
    } 
} 

export function* listenFetchListings() { 
    yield takeEvery('FETCH_LISTINGS_REQUEST', fetchListings) 
    console.log('watcher saga') 
} 

export default function* rootSaga() { 
    yield fork (fetchListings) 
} 

이 해고와 :

const reduxRouterMiddleware = routerMiddleware(browserHistory) 
const sagaMiddleware = createSagaMiddleware() 
const middleware = [reduxRouterMiddleware, sagaMiddleware] 

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

const store = createStore(rootReducer, defaultState, enhancers) 

sagaMiddleware.run(rootSaga) 

export const history = syncHistoryWithStore(browserHistory, store) 
export default store 

sagas.js 파일처럼 보이는 콘솔 로그에 예상되는 페이로드가 표시됩니다. 죄송하지만 FETCH_LISTINGS_SUCCESS 작업은 발송되지 않습니다. ReduxDevTools에서 수동으로 디스패치하면 내 상태가 아름답게 수정됩니다. 테스트 목적으로 명시 적 호출을 사용하여 시도하고 테스트하기 위해 listenFetchListings saga를 추가했습니다. 불행히도, FETCH_LISTINGS_REQUEST 동작을 수동으로 보내면 트리거되지 않는 것 같습니다. 몇 시간의 테스트 후 독서 문서와 튜토리얼을 읽은 후에 패배를 인정해야합니다. 도와주세요.

답변

0

사실,이 질문은 주석으로 넣어 정답이 있습니다 redux-saga cannot catch actions dispatched by store enhancers

문제는 작성 함수의 인수의 순서였다. 다음과 같이 구성하면 완벽하게 작동합니다.

const enhancers = compose(
    applyMiddleware(...middleware), 
    window.devToolsExtension ? window.devToolsExtension() : f => f 
) 
관련 문제