我如何检测和响应 Flux 中组件的成功和失败?

How can I detect and respond to success and failure from a component in Flux?

例如,用户需要创建一个资源。单击 "create" 按钮将调用将数据发送到 API 的操作。如果资源创建成功,派发一个 "Success" 动作。否则,调度一个 "Failure" 动作。

组件如何响应 Flux 中的成功或失败?我应该在组件读取的商店中设置 success/failure 标志吗?我是否应该在 success/failure 的组件上使用它们自己的侦听器从商店发出单独的事件?

更具体地说,假设我想路由到 "Success" 上创建的资源。如果我想在 "Failure" 上打开一个特定的对话框?我如何从组件中做到这一点?

我只是想找出最佳做法。

谢谢!

具体如何执行此操作取决于您使用的 Flux 实现。不过处理方法大同小异:

一般来说,在任何 Flux 实现中,您都可以将商店连接到组件道具,这样每当您的商店更新时,连接到商店的任何组件都将获得更新的商店值。因此,如果您想处理商店的任何类型的更改,您要做的就是将您的组件连接到商店并使用 component update methods 以使您的组件检测商店的更改。

例如,如果您想在 API 呼叫中响应 success/failure,您将在您的商店中执行以下操作:

{
    ...
    runningApiRequest: //boolean value
    apiRequestResult: //whatever your API returns
    ...
}

然后您将使用您正在使用的任何 Flux 库来使调用实际 API 请求操作的组件接收 apiRequestSucceededapiRequestResult 作为道具。在您的组件中,您可以实现以下内容:

componentDidUpdate(prevProps, prevState) {
    if (!prevProps.runningApiRequest && this.props.runningApiRequest) {
      // request started
      this.showLoadingIndicator()
    }
    if (prevProps.runningApiRequest && !this.props.runningApiRequest) {
      // request finished, handle success or failure
      this.handleRequestResult(this.props.apiRequestResult)
    }
}

当然,这不是唯一的方法,但是处理对 Flux 商店的更改将始终归结为相同的基本构建块:将道具挂接到商店并处理生命周期方法中道具的更改。