【问题标题】:Does Apollo cache the queries made from a Query component?Apollo 是否缓存从 Query 组件发出的查询?
【发布时间】:2019-10-05 18:17:12
【问题描述】:

我有一个 Query 组件,它从 GraphQL 服务器检索数据,一切正常。

我目前正在将 props 传递给一个无状态子组件,我想通过将其设置为从本地 Apollo 缓存读取数据来使其无状态(永远不能在父组件之前加载子组件)。

但我遇到了一个错误。我从docs 了解到,如果缓存中没有任何内容,readQuery 方法将失败,但这让我感到困惑:数据应该在缓存中,因为它之前在父组件中加载。还是不是?

这里是源代码:

【问题讨论】:

  • 详细信息、代码、查询、类型、未定义 id 字段...
  • 我们需要更多的上下文来确定这种行为的潜在原因。请包括相关代码(即两个组件)。

标签: reactjs apollo react-apollo apollo-client


【解决方案1】:

调用readQuery 只是从缓存中读取一次,这几乎不是您想要的。 Query 组件订阅缓存中的更改,并将在缓存未命中时触发网络请求(假设您使用默认的cache-first fetch policy)。您可以安全地在您的应用程序中使用多个 Query 组件来执行相同的查询 - 只要它们使用相同的 variables,渲染多个 Query 组件只会导致向您的服务器发出一个请求。

readQuery 只应在您需要读取并更新缓存的一部分时在update 函数中使用——不要使用它为您的组件提供数据。如果您只想从缓存中读取,可以使用cache-only 策略,但同样很少需要这样做,因为 Apollo 足够聪明,可以知道查询何时进行。

【讨论】:

    猜你喜欢
    • 2019-01-22
    • 2020-06-19
    • 2021-02-23
    • 2021-02-09
    • 2021-01-21
    • 2019-09-24
    • 2022-12-22
    • 2019-10-03
    • 1970-01-01
    相关资源
    最近更新 更多