【问题标题】:Replacing Redux with Apollo for local state management用 Apollo 代替 Redux 进行本地状态管理
【发布时间】:2020-08-30 22:28:47
【问题描述】:

我对 GraphQL 和 Apollo 还很陌生,但过去 3 年我一直在使用 Redux 和 React。基于 Apollo 文档,他们鼓励开发人员将其用作唯一的事实来源:

我们希望能够从以下位置访问布尔标志和设备 API 结果 我们的应用程序中有多个组件,但不想单独维护 Redux 或 MobX 商店。理想情况下,我们希望 Apollo 缓存成为 我们客户端应用程序中所有数据的单一事实来源

我正在尝试找出用 Apollo 复制 Redux 允许我的方法。在我的应用程序中,我有“标签”,一个对象数组,每个对象有近 15 个不同的字段。它们用于我的应用程序的 3 个不同部分,每个部分显示特定的“标签”以及“标签”中的特定字段。基于此,我使用 Redux 处理此问题的方法是从我的 API 中获取“标签”,并且在 reducer 中,我创建不同的数组,其中包含每个部分所需的特定“标签”的 ID,我还创建带有原始数据的 Map (id, value)。它会是这样的:

const tags = new Map(); //(tagId, tag) containing all the tags
const sectionATags = []; // array of ids for section A tags
const sectionBTags = []; // array of ids for section B tags
const sectionCTags = []; // array of ids for section C tags

我的目标是复制相同的行为,但即使他们鼓励您使用 Apollo 管理您的本地状态,我也不确定我想要实现的目标是否可以通过简单的方式 ,或者如果使用 Apollo 这样做实际上是一种良好做法。我一直在关注文档中的this example,他们主要做的是通过扩展查询或使用@client 指令改变缓存数据来添加或删除从服务器接收的数据中的额外字段。

同时,我了解 GraphQL 旨在查询您需要的特定数据,而不是典型的 REST 请求,在这种请求中,无论您是否需要,您都会获得包含所有数据的大型 JSON,但感觉就像在这种情况下使用每个部分所需的特定数据进行 3 个不同的查询一样效率不高。

我不确定我是否遗漏了什么,或者 Apollo 可能被认为是“更简单的本地状态管理”。我是在走正确的道路,还是应该继续使用 Redux 和另一个 GraphQL 库,它只允许我在没有管理层的情况下获取数据?

【问题讨论】:

    标签: reactjs redux graphql apollo


    【解决方案1】:

    Apollo 具有标准化缓存...您可以查询所有 [任何地方所需的字段] 数据 - 后续/附加查询可以是“仅缓存”。不会提出其他请求 - 如果所有必填字段都已存在,则安全。

    转换数据结构......通常不需要,我们正在处理我们需要的数据[和形状](“不是我们的问题,而是后端问题”)。你可以:

    • 更改解析器中的数据形状 [in graphql API wrapping REST],
    • 重塑 REST-link 中的数据(从 Apollo 直接访问 REST API),
    • 启动时读取一次数据,转换为本地保存(以下所有查询都读取本地)

    常见的应用程序状态可以留在 redux 中 - 数据获取应该在 apollo 中。

    【讨论】:

    • 我试图了解我想要实现的目标是否可以通过 Apollo 实现。我不想重塑,而是想根据从服务器获取的数据创建新的数据结构。使用 Apollo 是否有意义,还是我应该继续使用 Redux?
    • 仍然是第三种情况...扩展/转换或保存为单独的类型,所有可能的
    猜你喜欢
    • 2021-04-04
    • 2020-03-12
    • 2019-05-08
    • 2021-07-18
    • 2019-03-25
    • 2020-08-23
    • 2022-01-14
    • 1970-01-01
    • 2017-04-20
    相关资源
    最近更新 更多