RxJSとReduxの組み合わせであるredux-observableの使い方について相談させて下さい。
epicの定義は基本的にaction-inとaction-outの対応を記述することになると思います。
ただ、扱うのはストリームですので例えばリストを受け取ってそのリストの内容についてさらにサーバーから情報を収集する
という挙動の場合
in側は1つのActionでもout側は複数のActionになりうると思います。
その場合の対応について教えてください。
typescriptでのEpicの定義は以下となっています。
export declare interface Epic<T, S> { (action$: ActionsObservable<T>, store: MiddlewareAPI<S>): Observable<T>; }
やはり無理なのでしょうか?
現状ではout側で何もしない 'DO_NOTHING' Actionを返す方針にして
ループを回してdispatchを複数回投げるという方針で実装して動いています。
これが正解なのでしょうか?
typescript
1 2export const fetchAccountsEpic: Epic<actions.ActionBase, State> = 3 (actions$, state) => actions$.ofType('SET_MAIN_FFEDS') 4 .map(action => ((<comm.Contentlist> action.payload)).contents.map(c => c.account_id)) 5 .flatMap(accountIds => _.uniq(accountIds)) 6 .do(accountID => state.dispatch({type: 'FETCH_ACCOUNT', payload: {accountID} })) 7 .map(a => ({ type: 'DO_NOTHING', payload: undefined })); 8 9 10export const fetchAccountEpic: Epic<actions.ActionBase, State> = 11 (actions$, state) => actions$.ofType('FETCH_ACCOUNT') 12 .map(action => ((<actions.FetchAccountPayload> action.payload)).accountID) 13 .flatMap(accountID => fetchAccount$(accountID)) 14 .map(a => ({ type: 'SET_ACCOUNTS', payload: [a] })); 15 16
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。