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

时间:2020-02-25 08:34:13

标签: apollo react-apollo apollo-client

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

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

enter image description here

这是我要查询的方式:

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

我还尝试了如下片段:

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

但是那让我没​​有了。

1 个答案:

答案 0 :(得分:3)

您需要使用__typename和要从缓存中查询的ID指定对象。请注意,filters对象的ID是Apollo缓存内的filters:[id],这是访问缓存中的片段[__typename]:[key]所需要的格式。您可以在docs中了解有关分配缓存标识符的更多信息。

您可以使用以下内容访问片段:

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