使用 client.readFragment() 从 Apollo 缓存中读取片段

Reading a Fragment from the Apollo Cache with client.readFragment()

成功执行查询后,我可以使用 Apollo Dev Tools 看到以下内容(附图)。

但是,我无法直接使用 ID(例如 2025)查询 filter 对象。我得到的是 Uncaught Invariant Violation: Can't find field filters on ROOT_QUERY object.

以下是我尝试查询的方式:

client.cache.readQuery({
  query: gql`
    query Filter {
      filters {
        key
        value
      }
    }
  `
});

我也试过如下片段:

client.readFragment({
  id: '2025',
  fragment: gql`
    fragment filter on filters {
      id
      key
      value
    }
  `
});

但这给了我空。

您需要用__typename和您要从缓存中查询的id来指定对象。请注意,filters 对象的 ID 在 Apollo Cache 中是 filters:[id],这是您访问缓存中该片段所需使用的格式,[__typename]:[key]。您可以在 docs.

中阅读有关分配缓存标识符的更多信息

您使用以下方式访问您的片段:

const filter = client.readFragment({
  fragment: gql`
    fragment filter on filters {
      id
      key
      value
    }
  `,
  fragmentName: 'filter',
  id: 'filter:2025'
})