GraphQL Apollo 删除悬空引用

wil*_*ire 5 apollo graphql

从 Apollo 客户端 3.0 开始,可以使用 来从缓存中删除规范化对象cache.evict,如下所示:

{
  update: (cache, { data: updateData }) => {
    if (isNil(updateData)) return

    const { id } = updateData.removeSomething
    cache.evict({ id: `Something:${id}` })
    cache.gc()
  }
}
Run Code Online (Sandbox Code Playgroud)

然而,以这种方式删除它似乎仍然会在它出现的列表中留下指向该对象的悬空指针。在缓存中看起来像这样:

[{__ref: "Something:9180d367-b018-46c1-b9cf-049258408fd8"}]
Run Code Online (Sandbox Code Playgroud)

在不知道父 ID 的情况下如何删除对对象的这些引用?

编辑: 这个拉取请求在一定程度上回答了它,但没有找到任何带有子 ID 的内容。

小智 0

默认情况下,当您逐出一个对象(例如Something:${id})时,缓存中对其的引用不会被删除。这些引用成为悬空引用,意味着它们指向一个不存在的对象。这些引用将保留,以防随后恢复对象。

摘要,即使缓存列表的内容包含悬空引用,该列表的查询结果也不应该包含