reactjs - 用于本地状态管理的 Apollo Client 3.0 或 Redux?

我正在使用 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/

相关文章:

r - 添加一列显示前两列是否包含 0

java - 在 java.time 中,为什么 WeekFields.SUNDAY_START 会

aws-cloudformation - AWS Proton 与 CloudFormation

r - 根据条件为每个 ID 创建不同数量的行

powershell - 如何显示使用扩展参数调用的命令行

python - numpy/pandas 向量化自定义 for 循环

python - 模块未找到错误 : No module named 'psycopg2' in i

swift - 如何在 SwiftUI 上启用核心数据加密?

java - 问题启动 Cassandra。 Java 运行时环境 : 检测到 fatal erro

angular - 引用错误 : Can't find variable: globalThis