Redux 只维护共享数据
Redux for maintaining only shared data
在我们的 Angular 应用程序中,我们计划使用 Redux,但决定使用它来仅管理至少由两个组件共享的数据。只被一个组件使用的数据会直接拉取,不使用 Redux。例如假设一个组件必须显示一个值列表,并且这些值不与任何其他组件共享,那么我们将使用服务获取该列表。但是在获取此数据时,它可能会影响商店中的其他一些状态,例如它可能会分派一些操作,例如 NETWORK_REQUEST_SENT、NETWORK_REQUEST_COMPLETED,以便 spinner/overlay 组件可以更改其显示。
现在的问题是代码的哪一部分应该负责调度这些操作。
- 场景 1:从服务中获取数据的容器组件可以调度这些操作,但我认为它不属于这里。
- 场景 2:进行 HTTP 调用的服务可以分派这些操作,这意味着该服务必须订阅 HTTP observable 和 return 它自己的组件 observable。
- 场景 3:可以在 Redux 中间件中完成,但是我们必须分派一个操作来获取值列表,这意味着值列表必须存储在商店中,而我们不需要想要。
- 场景 4:如前所述 here,我们可以创建一个抽象层,但感觉就不需要中间件了。
如果您使用 HttpClientModule
,您可以注册拦截器,如 https://medium.com/@ryanchenkie_40935/angular-authentication-using-the-http-client-and-http-interceptors-2f9d1540eb8
中所述
您可以在 NETWORK_REQUEST_SENT
调用时调用它,在 finally 中调用 NETWORK_REQUEST_COMPLETED
以在请求完成时调用操作。
那么就不需要再有一个observable了。
在我们的 Angular 应用程序中,我们计划使用 Redux,但决定使用它来仅管理至少由两个组件共享的数据。只被一个组件使用的数据会直接拉取,不使用 Redux。例如假设一个组件必须显示一个值列表,并且这些值不与任何其他组件共享,那么我们将使用服务获取该列表。但是在获取此数据时,它可能会影响商店中的其他一些状态,例如它可能会分派一些操作,例如 NETWORK_REQUEST_SENT、NETWORK_REQUEST_COMPLETED,以便 spinner/overlay 组件可以更改其显示。
现在的问题是代码的哪一部分应该负责调度这些操作。
- 场景 1:从服务中获取数据的容器组件可以调度这些操作,但我认为它不属于这里。
- 场景 2:进行 HTTP 调用的服务可以分派这些操作,这意味着该服务必须订阅 HTTP observable 和 return 它自己的组件 observable。
- 场景 3:可以在 Redux 中间件中完成,但是我们必须分派一个操作来获取值列表,这意味着值列表必须存储在商店中,而我们不需要想要。
- 场景 4:如前所述 here,我们可以创建一个抽象层,但感觉就不需要中间件了。
如果您使用 HttpClientModule
,您可以注册拦截器,如 https://medium.com/@ryanchenkie_40935/angular-authentication-using-the-http-client-and-http-interceptors-2f9d1540eb8
您可以在 NETWORK_REQUEST_SENT
调用时调用它,在 finally 中调用 NETWORK_REQUEST_COMPLETED
以在请求完成时调用操作。
那么就不需要再有一个observable了。