如何直接使用apollo-client API通过fetchPolicy ='cache-and-network'查询?

时间:2019-08-31 04:33:06

标签: reactjs react-apollo apollo-client

我想直接通过fetchPolicy'cache-and-network'将apollo缓存与apollo-client api结合使用。似乎我们必须使用watchQuery api而不是查询,但不幸的是我无法使其正常工作。

所以你们能给我一些示例代码来使用'watchQuery'来获取数据,就像我们从'query'中得到的一样:加载,数据,networkStatus ...?

client.query({ query: Query.getUserById, fetchPolicy: 'cache-and-network', variables: { userId } }).then(data => { console.log(data.loading, data.getUserById) })

2 个答案:

答案 0 :(得分:2)

我认为apollo已经为包括fetch-policy在内的所有操作提供了任何配置,并且其文档主要涵盖了所有用例

可以提供您的代码吗?我想知道为什么当您使用另一种类型的Query

cache不起作用

答案 1 :(得分:0)

2021 年:

如果您使用的是 react,useQuery() 钩子已经在遵循 watchQuery 而不是 query 的行为。所以你可以这样做:

  const { loading, error, data, refetch } = useQuery(query, {
    fetchPolicy: "cache-and-network"
  });

或者在创建 apollo 客户端时设置为 defaultOptions:

import {
  ApolloClient,
  InMemoryCache,
  HttpLink,
  DefaultOptions
} from "@apollo/client";

const defaultOptions: DefaultOptions = {
  watchQuery: {
    fetchPolicy: "cache-and-network",
    errorPolicy: "ignore",
    notifyOnNetworkStatusChange: true
  }
};
export const platformClient = new ApolloClient({
  link: new HttpLink({
    uri: "https://xxxxx",
    credentials: "same-origin"
  }),
  cache: new InMemoryCache(),
  defaultOptions
});

关于为什么 cache-and-network 不允许用于 query 的一些解释。

原因在 2019 年已在此处解释: https://github.com/apollographql/apollo-client/issues/3130#issuecomment-478409066
基本上,query() 的行为/逻辑不支持这种获取策略。因此,他们在打字级别阻止了它。