在Redux-Observable中,仅当初始操作完成时才调用映射到操作

时间:2018-07-09 10:30:05

标签: redux rxjs redux-observable

在SET_COLOUR_RANGE操作下面的代码中,更新Redux中的一个值,该值是FETCH_COLOURS的有效负载。因此,我希望在Redux中的值更新后调用FETCH_COLOURS动作。

使用mapTo运算符是仅在SET_COLOUR_RANGE完成之后才调用FETCH_COLOURS操作,还是在之后立即调用?

import { selectColoursRange } from 'app/selectors/colours';

export const setColourRangeEpic = action$ =>
  action$.pipe(ofType('SET_COLOUR_RANGE'), mapTo({ type: 'FETCH_COLOURS' }));

export const fetchColoursEpic = (action$, store) =>
  action$
    .ofType('FETCH_COLOURS')
    .mergeMap(() =>
      fromPromise(
        axios.post(`/colour`, selectColoursRange(store.getState()))
      )
        .map(response => ({
          type: 'FETCH_COLOURS_SUCCESS',
          data: response.data
        }))
        .catch(error =>
          Observable.of({
            type: 'FETCH_COLOURS_ERROR',
            error
          })
        )
    );

1 个答案:

答案 0 :(得分:1)

reducer总是会在史诗获得动作之前获得动作。

因此SET_COLOUR_RANGE进入化简器(从而更新状态),然后进入setColourRangeEpic并映射到FETCH_COLOURS动作。此FETCH_COLOURS操作转到减速器,然后转到fetchColoursEpic。在您调用selectColoursRange(store.getState())时,状态已更新。