【问题标题】:How to access fetch policy in local resolver using Apollo Graphql React client如何使用 Apollo Graphql React 客户端访问本地解析器中的获取策略
【发布时间】:2020-03-06 09:28:00
【问题描述】:

我正在使用 React 和 Apollo Graphql 客户端创建一个应用程序。此应用必须具有本地解析器才能从旧版 REST API 检索数据并将其写入缓存。

我对这个解析器的期望是,它首先会尝试从本地缓存中获取数据,如果不存在,它将从旧 API 中获取。但是有时这些数据也会被我的应用程序的其他部分更新,所以在这种情况下,我希望解析器忽略缓存并直接转到旧版 API。

我知道我上面描述的内容类似于 Apollo 客户端提供的 fetchPolicies:第一个场景是 cache-first,第二个场景是 network-only,我想用它们来确定我的解析器行为。

但是,我无法在解析器的参数中找到 fetchPolicy。我现在使用的解析器的函数签名是这样的:

export async function customerData(
  root: any,
  variables: any,
  context: { client: ApolloClient<any>; cache: InMemoryCache; getCacheKey: any },
  info: any
): Promise<CustomerData | null> {
  console.log('root', root);
  console.log('variables', variables);
  console.log('context', context);
  console.log('info', info);

  return null;
}

而且获取策略不可用。

当本地解析器被执行时,有没有办法知道选择的fetchPolicy?或者有没有其他方法可以解决这个问题?

注意 1:我知道我可以将 fetchPolicy 连同解析器的变量一起发送,但我正在寻找一种更优雅的解决方案,可以利用我们在 Apollo 中已有的东西。

注意 2:我也可以为此使用 Apollo Link Rest,而不是编写自己的解析器并让它调用 fetchaxios 来检索数据。但我不想使用它,因为它不支持任何超时配置,而且由于我的应用程序旨在在互联网连接不良的环境中执行,我不希望它尝试无限期地获取数据。

【问题讨论】:

    标签: reactjs graphql apollo react-apollo


    【解决方案1】:

    我刚刚看到了我认为之前错过的 Apollo 客户端文档的这一部分:https://www.apollographql.com/docs/react/data/local-state/#working-with-fetch-policies

    基本上它说fetch-policies 在调用解析器之前进行评估,并且它们的工作方式与调用远程解析器时一样。

    所以,我运行了一些测试,并使用默认策略 (cache-first),我的解析器只被调用一次,其余时间结果直接从缓存中返回。

    如果我将 fetch-policy 更改为 network-only,那么我的解析器函数总是会被调用。

    【讨论】:

      猜你喜欢
      • 2020-07-22
      • 2011-06-22
      • 2022-10-25
      • 2022-12-12
      • 2023-03-19
      • 2020-08-27
      • 2020-08-23
      • 2020-01-30
      • 2020-09-11
      相关资源
      最近更新 更多