你把苹果比作橙子.是的,在较高级别上,redux
和apollo-client
都为您提供了一种管理全局应用程序状态的方法.但是,redux
允许您创建一个可预测的状态容器,该容器会根据您定义的操作进行更改.这意味着redux
个报价:
- 可预测性.减缩器是纯函数——给定相同的状态和动作,减缩器总是会产生相同的结果.
- 可测试性.同样,因为减缩器只是函数,所以对它们进行单元测试很简单.
- 可伸缩性.因为redux迫使您以特定的方式组织代码,所以它使代码更易于维护.即使随着代码库的增长,您的代码仍然可以调试,并且其他开发人员也可以理解.
Dan Abromov points out several other benefits:
- 序列化用户操作,并将它们与状态快照一起附加到自动错误报告中,以便产品开发人员可以重播它们以重现错误.
- 通过网络传递action对象以实现协作环境,而无需对代码编写方式进行重大更改.
- 维护撤销历史记录或实现乐观Mutations ,而不需要对代码编写方式进行重大更改.
- 在开发中的状态历史之间切换,并在代码更改时从动作历史重新判断当前状态,即la TDD.
- 为开发工具提供全面的判断和控制功能,以便产品开发人员可以为其应用程序构建自定义工具.
- 在重用大部分业务逻辑的同时,提供替代UI.
是的,redux
是有很多样板的.然而,您、您的应用程序和您的团队都可能从使用它中获得很多好处,而不仅仅是拥有一种管理全局状态的方法.另一方面,如果你看不到redux提供的特性的价值,或者认为它们不值得为你的代码增加间接性和复杂性,那么就不要使用它.如果您只需要一种管理全局应用程序状态的方法,那么您可以利用apollo-client
或其他库,或者只利用上下文API和useReducer
钩子来推出自己的解决方案.
Apollo客户端使用@client
指令来管理本地状态非常方便,尤其是如果您已经在使用库来查询GraphQL API.能够轻松地用派生字段修饰查询结果是很好的.能够使用相同的API来查询服务器和查询本地状态有助于实现良好的DX.但是apollo-client
不能replace redux
,因为在一天结束时,这两个图书馆出于非常不同的原因做了非常不同的事情.