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。