我正在使用 Apollo Client 3.0 从 graphql 服务器获取数据,但我无法决定使用什么进行本地状态管理(Redux 或 Apollo Client 3.0)。
我认为 Redux 迫使我编写更多代码,但以一种可预测且更简洁的方式,这很好。还将 Redux 添加到应用程序意味着我将混合使用 2 个状态管理库。
Apollo Client 3.0 有 Reactive Variables,但对于大型应用我认为它会变得一团糟!我也可以通过 @client 指令使用查询和突变,但这可能有点令人困惑。
你有什么推荐给我的? 我应该使用什么? 你能给我一些很好的例子吗?
谢谢!
最佳答案
Apollo 不是状态管理库。它是 graphql 的一个了不起的客户端和缓存,但是当你开始将它用作客户端状态管理时,你会注意到它并不是真正的目的。
您必须编写的代码量与 vanilla redux 类似,因为您必须为每个本地查询和变更编写自己的解析器,但是由于中间有一个基于文本的协议(protocol),您失去了所有类型安全性当保持“纯 JavaScript”时。然后你必须手动将你的数据放入规范化的缓存中,即使你的数据没有规范化,所以你将开始将你的设置放入 settings/1
,因为一切都需要一个 id,即使您的应用程序中只有一个设置实例。
根据我的经验,这一切都感觉很笨拙。
此外,现代 redux 的样板文件比您现在可能习惯的要少得多 - 如果您按照官方建议使用 redux 工具包 (take a look at this page of the official redux docs),您将编写可能使用的代码的四分之一与“vanilla redux”一起使用。 现代 redux 没有手写的 action creators、action types、switch-case reducers 或不可变逻辑。这些都是目前在幕后处理的所有实现细节。
我实际上在一年半前就这个主题做过一次 session 演讲,所以我有一些例子。
Here is what you write with Apollo (是的,该示例对于 Apollo 来说有点人为 - 但我想对所有库使用相同的示例,而登录流程正是我所追求的)
This is what it looks like in redux
https://stackoverflow.com/questions/65463776/