在 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()) 时,状态已经更新。
在下面的代码中,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()) 时,状态已经更新。