Redux 中间件和 GraphQL



好的,根据我的理解,我们现在在 redux 中使用中间件进行所有异步调用,现在来自 Apollo 文档,我们可以直接在组件中使用查询和突变。

我个人认为使用中间件在单独的位置编写所有业务逻辑更直观,因为它有助于使业务逻辑远离 UI(可以使用 redux 进行数据交换(

有没有办法将我的业务逻辑与 GraphQL 一起使用 redux 中间件而不是在我的 UI 中混合?

就像 redux-logic 的 create-logger 中的 fetch 或 axios 一样。

有没有办法使用带有 GraphQL 的 redux 中间件来保持我的业务逻辑独立,而不是在我的 UI 中混合它?

你可以通过使用apollo-fetch和redux-saga来实现它,这是一个Redux中间件。

当需要获取数据时,请调度一个简单的同步 Redux 操作。它被redux-saga截获,Redux-saga可以使用Apollo异步获取数据,如果需要,可以执行其他异步操作作为响应,然后将一个或多个同步操作调度到Redux存储。

然后,可以将业务逻辑拆分为称为"sagas"的异步 redux-saga 函数,该函数可以触发其他 sagas 以适应更复杂的逻辑,并最终将操作调度到 Redux,Redux 仍然是应用程序中的主要"事实来源"。

鉴于我的团队已经在使用graph/Apollo Client,我们最近不再使用Redux,而是选择Apollo Client的内置解决方案来管理本地状态。如其文档中所述:

Apollo 客户端 (>= 2.5( 具有内置的本地状态处理功能 允许您将本地数据存储在阿波罗缓存中 以及您的远程数据。要访问您的本地数据,只需查询它 与 GraphQL。您甚至可以在 同样的查询!

更具体地说,使用@client指令,您可以标记您希望使用客户端解析程序在本地获取字段数据以执行本地查询或更改,或者从缓存中获取字段数据。您可以在此处查看文档。使用这个单一工具的能力简化了我们的本地状态管理。更重要的是,此解决方案可以满足您在 UI 和业务逻辑之间实现更多分离的请求,因为该逻辑应主要封装在客户端解析器中,客户端解析程序可以处理异步请求,包括通过网络的请求。

最新更新