私は、還元サガのためのシンプルで非常に普遍的なユースケースのようなものに問題があります。私は最初のデータセットで私の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
アクションを手動でディスパッチすると、トリガーされていないようです。 数時間のテスト、ドキュメントとチュートリアルの読み込み後、私は敗北を認めなければなりません。助けてください。