Epics
通过在 Model 中定义 epics,我们能够执行复杂的 RxJS 流从而分发 action。
note
我们默认你已拥有 Redux Observable 及 RxJS 的相关知识。
基本
在 epic 中,通过 this.rootAction$
获得全局 action observable,通过 this.rootState$
获得全局 state observable。
当 Container 被卸载时,epic 将中止分发 action。
function ofAction<TPayload>(
actionHelper: ActionHelper<TPayload, unknown>
): OperatorFunction<AnyAction, Action<TPayload>> {
return filter((action): action is Action<TPayload> =>
actionHelper.is(action)
);
}
const Model = createModel(
class extends ModelBase {
// ...
public epics() {
return {
search: () =>
this.rootAction$.pipe(
ofAction(this.actions.setSearchText),
debounceTime(500),
switchMap((action) =>
from(this.dependencies.api.search(action.payload))
),
map((result) => this.actions.setResult.create(result))
),
};
}
}
);