我试图从Redux 迁移到使用阿波罗图形to客户端附带的阿波罗客户端缓存。
阿波罗客户端与其他数据管理解决方案不同的关键特性之一是它的规范化缓存。仅仅通过设置阿波罗客户端,您就可以在不需要额外配置的情况下从盒子中获得一个智能缓存。
使用Redux,我们必须根据从副作用接收到的响应编写操作、类型和调度操作,并使用减法器设置存储中的数据,这是由阿波罗客户端自动完成的。
问题
1)从Redux转移到阿波罗客户端缓存有什么好处?
2)在迁移到阿波罗客户端缓存之前,我有什么需要担心的吗?
发布于 2020-01-25 03:28:36
你在把苹果比作橘子。是的,在高级别上,redux和apollo-client为您管理全局应用程序状态提供了一种方法。但是,redux允许您创建一个可预测的状态容器,该容器响应您定义的操作进行更改。这意味着redux提供:
是的,redux附带了很多样板。但是,您、您的应用程序和您的团队都可能从使用它获得许多好处,而不仅仅是有一种管理全局状态的方法。另一方面,如果您没有看到redux提供的特性的价值,或者认为它们不值得redux为您的代码增加间接和复杂性,那么就不要使用它。如果您所需要的只是一种管理全局应用程序状态的方法,那么您可以利用apollo-client或其他库,或者仅仅利用上下文API和useReducer钩子来滚动您自己的解决方案。
阿波罗客户端使用@client指令管理本地状态非常方便,特别是如果您已经使用库查询GraphQL API。能够轻松地使用派生字段来修饰查询结果是很好的。能够使用相同的API来查询您的服务器和查询本地状态,就可以获得良好的DX。但是apollo-client不能代替redux,因为在一天的最后,这两个库由于非常不同的原因而做非常不同的事情。
发布于 2020-04-11 22:35:21
我认为您在这里提出了一个很好的观点:“对于Redux,我们必须根据从副作用收到的响应来编写操作、类型和调度操作,并使用减法器设置存储中的数据,这是由阿波罗客户端自动完成的。”
对于副作用,Redux是命令式的,阿波罗是声明性的。声明性代码通常更短,因为您将逻辑委托给库/框架。
Daniel提出了一个很好的观点,将Redux和阿波罗客户端缓存进行比较就像苹果和橘子。这里的苹果和橘子是不同类型的状态,特别是远程和本地状态。不幸的是,Redux鼓励我们以同样的方式对待所有的州。
对于需要在服务器上检索、更新和变异的状态,我将利用阿波罗缓存。我会使用更轻的工具,比如React的上下文API来防止支柱钻探、全局应用程序状态和业务逻辑挂钩(例如useReducer/useState)。
棘手的部分是当远程状态和本地/全局应用程序状态混合时。因此,我会谨慎地定义它们如何交互的模式。
发布于 2020-01-24 06:36:41
只有在后端允许进行graphql调用的情况下,迁移到阿波罗才有意义,我们已经将我们的项目从redux迁移到了阿波罗,结果非常好。
阅读这个博客,它是从这个博客,我们决定的迁移
https://stackoverflow.com/questions/59891325
复制相似问题