【问题标题】:Reading a Fragment from the Apollo Cache with client.readFragment()使用 client.readFragment() 从 Apollo 缓存中读取片段
【发布时间】:2020-02-26 10:16:43
【问题描述】:

成功执行查询后,我可以使用 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
    }
  `
});

但这给了我null。

【问题讨论】:

    标签: apollo react-apollo apollo-client


    【解决方案1】:

    您需要使用__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'
    })
    

    【讨论】:

      猜你喜欢
      • 2021-05-27
      • 2020-07-23
      • 2021-09-30
      • 2021-06-05
      • 2018-10-16
      • 2019-01-19
      • 2021-08-24
      • 2020-10-22
      • 2020-10-25
      相关资源
      最近更新 更多