Dispatcher
Dispatcher 是进行 Action 分发和改变 Store 内容的主要模块。Flux 提供了一个Dispatcher类来提供服务。每个采用 Flux 的应用都需要至少一个Dispatcher实例。Dispatcher类提供了以下五个方法来完成 Action 分发。
register(callback),向 Dispatcher 注册一个回调函数,这个回调函数会在每次分发 Action 之后调用。回调函数注册后会返回一个分配给这个回调函数的 ID,可供后文的waitFor()等方法使用。unregister(id),将使用register()注册的回调函数解除注册,其中id参数使用注册函数的返回值。waitFor(ids),在执行后续的操作之前等待所有指定的回调函数执行完成,参数ids为所有回调函数的 ID 列表。dispatch(payload),将指定的载荷(或者 Action)分发到所有的回调函数中。isDispatching(),查询当前 Dispatcher 是否处于分发状态。
以下给出一个使用 Flux 进行 Store 管理的示例。
const dispatcher = new Dispatcher();
let CargoStore = {
cargos: []
};
dispatcher.register(function (payload) {
if (payload.actionType === 'add_cargo') {
CargoStore.cargos.push(payload.cargo);
}
});
dispatcher.dispatch({
actionType: 'add_cargo',
cargo: 'ProductName'
});
这个示例中没有使用不可变数据,这在实际项目中并不是优选方案,实际项目中还是要优先选择不可变数据来实现 State。