如何通过 ID 从 Apollo 缓存中读取嵌套对象?
Posted
技术标签:
【中文标题】如何通过 ID 从 Apollo 缓存中读取嵌套对象?【英文标题】:How can I read a nested object from Apollo cache by its ID? 【发布时间】:2020-10-25 15:44:27 【问题描述】:我对 GraphQL 有点陌生,我正在使用 React 和 Apollo Client 构建一个应用程序。
当我的应用程序启动时,我在 React 应用程序的最顶层组件中使用一个 GraphQL 查询来获取我需要的几乎所有数据。在组件树更下方的组件中,我想通过其 ID 直接获取模型。我到底该怎么做?
例如说我最初的 gql 查询是:
query User($id: ID!)
user(id: $id)
username
todoLists
id
title
todoList
todoListId
id
name
updatedAt
todo
id
title
content
updatedAt
然后我将如何通过本地缓存获取 ID 为 1 的待办事项?
当然我可以再次获取整个用户并映射到对象,但这似乎是错误的。
我尝试过使用 readQuery,但最后总是收到“找不到字段...”错误。我应该使用本地解析器吗?
什么是最佳做法?
非常感谢任何带有示例的提示。
【问题讨论】:
【参考方案1】:有很多方法可以做到这一点,但推荐的方法是readFragment。
这需要您将查询的“待办事项”部分转换为片段,但这可能是您无论如何都想做的事情。
使用 Fragment 可以让 Apollo 明确指出“todo”是“todo”是“todo”,无论它出现在哪个查询中。readFragment / writeFragment 让您可以直接使用该“todo”,而无需担心关于它来自哪个查询或它需要写入哪个查询。
【讨论】:
以上是关于如何通过 ID 从 Apollo 缓存中读取嵌套对象?的主要内容,如果未能解决你的问题,请参考以下文章