Gan*_*kar 35 reactjs graphql redux apollo-client react-context
我正在尝试从Redux Store迁移以使用Apollo Graphql 客户端附带的Apollo 客户端缓存。
将 Apollo Client 与其他数据管理解决方案区分开来的关键特性之一是其规范化缓存。只需设置 Apollo Client,您就可以获得开箱即用的智能缓存,无需额外配置。
使用 Redux,我们必须根据从副作用接收到的响应来编写动作、类型和分派动作,并使用 reducer 设置存储中的数据,这由 Apollo Client 自动完成。
问题:
1) 从 Redux 迁移到 Apollo Client Cache 有什么优势?
2) 在迁移到 Apollo Client Cache 之前,我应该担心什么吗?
Dan*_*den 43
你在比较苹果和橙子。是的,在较高的水平都redux并apollo-client为您提供了管理全球应用程序状态的方式。但是,redux允许您创建一个可预测的状态容器,该容器会根据您定义的操作进行更改。这意味着redux提供:
- 序列化用户操作并将它们与状态快照一起附加到自动错误报告中,以便产品开发人员可以重放它们以重现错误。
- 通过网络传递动作对象以实现协作环境,而无需对代码的编写方式进行重大更改。
- 维护撤消历史或实现乐观的变化,而不会对代码的编写方式进行重大更改。
- 在开发中的状态历史之间穿梭,并在代码更改时从动作历史中重新评估当前状态,即 TDD。
- 为开发工具提供完整的检查和控制功能,以便产品开发人员可以为其应用程序构建自定义工具。
- 在重用大部分业务逻辑的同时提供替代 UI。
是的,redux带有很多样板。但是,您、您的应用程序和您的团队都可以从使用它中获得很多好处,而不仅仅是拥有一种管理全局状态的方法。另一方面,如果您没有看到 redux 提供的功能的价值,或者认为它们不值得redux为您的代码添加间接性和复杂性,那么请不要使用它。如果您只需要一种管理全局应用程序状态的方法,那么您可以利用apollo-client或其他一些库,或者仅利用 Context API 和useReducer钩子来推出您自己的解决方案。
Apollo Client 使用该@client指令来管理本地状态非常方便,特别是如果您已经使用该库来查询 GraphQL API。能够轻松地使用派生字段装饰查询结果是很整洁的。能够使用相同的 API 来查询您的服务器和查询本地状态是一个很好的 DX。但是apollo-client不能替换, redux因为归根结底,这两个库会出于非常不同的原因做非常不同的事情。
dwu*_*u39 17
我认为您在这里提出了一个很好的观点:“使用 Redux,我们必须根据从副作用收到的响应编写操作、类型和调度操作,并使用 reducer 设置存储中的数据,这由 Apollo Client 自动完成。 ”
对于副作用,Redux 是必要的,而 Apollo 是声明性的。声明性代码通常较短,因为您将逻辑委托给库/框架。
Daniel Rearden 提出了一个很好的观点,即比较 Redux 和 Apollo 客户端缓存就像苹果和橘子。这里的苹果和橘子是不同类型的状态,特别是远程状态和本地状态。不幸的是,Redux 鼓励我们一视同仁地对待所有状态。
对于需要在服务器上检索、更新和变异的状态,我会利用 Apollo 缓存。我会使用更轻量的工具,比如 React 的 Context API 来防止 prop 钻取、全局应用程序状态和业务逻辑的钩子(例如 useReducer/useState)。
棘手的部分是远程状态和本地/全局应用程序状态混合时。所以我会小心地定义他们如何交互的模式
| 归档时间: |
|
| 查看次数: |
12168 次 |
| 最近记录: |