2017-01-02 17 views
0

私は、還元サガのためのシンプルで非常に普遍的なユースケースのようなものに問題があります。私は最初のデータセットで私のreduxストアを埋めるためにAPIを呼び出そうとしています。これを行うために、私はスタートアップ時にサガを実行しようとしています。サガは他のサガとアクションを引き起こさない

store.jsの関連部分は以下のようになります。

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ファイルは、以下のようになります。私は、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) 
} 

とコンソールログには予想されるペイロードが表示されます。残念ながら、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 
) 
関連する問題