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。