在 Redux-Observable 中,映射到的动作是否仅在初始动作完成时才被调用

In Redux-Observable does the mapped to action only get called when initial action completes

在下面的代码中,SET_COLOUR_RANGE 操作更新了 Redux 中的一个值,这个值是 FETCH_COLOURS 的有效负载。所以我想在 Redux 中的值更新后调用 FETCH_COLOURS 操作。

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

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
          })
        )
    );

reducer 总是会先于 epic 获取 action。

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