首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >阿波罗客户缓存与Redux

阿波罗客户缓存与Redux
EN

Stack Overflow用户
提问于 2020-01-24 06:22:50
回答 3查看 20.5K关注 0票数 44

我试图从Redux 迁移到使用阿波罗图形to客户端附带的阿波罗客户端缓存

阿波罗客户端与其他数据管理解决方案不同的关键特性之一是它的规范化缓存。仅仅通过设置阿波罗客户端,您就可以在不需要额外配置的情况下从盒子中获得一个智能缓存。

使用Redux,我们必须根据从副作用接收到的响应编写操作、类型和调度操作,并使用减法器设置存储中的数据,这是由阿波罗客户端自动完成的。

问题

1)从Redux转移到阿波罗客户端缓存有什么好处?

2)在迁移到阿波罗客户端缓存之前,我有什么需要担心的吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-01-25 03:28:36

你在把苹果比作橘子。是的,在高级别上,reduxapollo-client为您管理全局应用程序状态提供了一种方法。但是,redux允许您创建一个可预测的状态容器,该容器响应您定义的操作进行更改。这意味着redux提供:

  • 可预测性。减速器是纯函数--给定相同的状态和动作,减速器总是产生相同的结果。
  • 可测试性。同样,因为还原器只是函数,所以单元测试很简单。
  • 可伸缩性。因为redux强制您以特定的方式组织代码,所以它使您的代码更易于维护。即使您的代码库不断增长,您的代码仍然是可调试的,其他开发人员也可以理解。

丹·阿布罗莫夫指出了其他几个好处

  • 序列化用户操作,并将它们与状态快照一起附加到自动错误报告中,以便产品开发人员可以重放它们以再现错误。
  • 通过网络传递操作对象,以实现协作环境,而不会对代码的编写方式进行重大更改。
  • 维护撤消历史记录或实现乐观的突变,而不对代码的编写方式进行重大更改。
  • 在开发的状态历史之间旅行,并在代码更改时从动作历史重新评估当前状态,a la TDD。
  • 为开发工具提供完整的检查和控制功能,以便产品开发人员可以为其应用程序构建自定义工具。
  • 提供可供选择的UI,同时重用大部分业务逻辑。

是的,redux附带了很多样板。但是,您、您的应用程序和您的团队都可能从使用它获得许多好处,而不仅仅是有一种管理全局状态的方法。另一方面,如果您没有看到redux提供的特性的价值,或者认为它们不值得redux为您的代码增加间接和复杂性,那么就不要使用它。如果您所需要的只是一种管理全局应用程序状态的方法,那么您可以利用apollo-client或其他库,或者仅仅利用上下文API和useReducer钩子来滚动您自己的解决方案。

阿波罗客户端使用@client指令管理本地状态非常方便,特别是如果您已经使用库查询GraphQL API。能够轻松地使用派生字段来修饰查询结果是很好的。能够使用相同的API来查询您的服务器和查询本地状态,就可以获得良好的DX。但是apollo-client不能代替redux,因为在一天的最后,这两个库由于非常不同的原因而做非常不同的事情。

票数 67
EN

Stack Overflow用户

发布于 2020-04-11 22:35:21

我认为您在这里提出了一个很好的观点:“对于Redux,我们必须根据从副作用收到的响应来编写操作、类型和调度操作,并使用减法器设置存储中的数据,这是由阿波罗客户端自动完成的。”

对于副作用,Redux是命令式的,阿波罗是声明性的。声明性代码通常更短,因为您将逻辑委托给库/框架。

Daniel提出了一个很好的观点,将Redux和阿波罗客户端缓存进行比较就像苹果和橘子。这里的苹果和橘子是不同类型的状态,特别是远程和本地状态。不幸的是,Redux鼓励我们以同样的方式对待所有的州。

对于需要在服务器上检索、更新和变异的状态,我将利用阿波罗缓存。我会使用更轻的工具,比如React的上下文API来防止支柱钻探、全局应用程序状态和业务逻辑挂钩(例如useReducer/useState)。

棘手的部分是当远程状态和本地/全局应用程序状态混合时。因此,我会谨慎地定义它们如何交互的模式。

票数 24
EN

Stack Overflow用户

发布于 2020-01-24 06:36:41

只有在后端允许进行graphql调用的情况下,迁移到阿波罗才有意义,我们已经将我们的项目从redux迁移到了阿波罗,结果非常好。

阅读这个博客,它是从这个博客,我们决定的迁移

票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59891325

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档