阻止 Apollo 缓存某些操作的请求

Prevent Apollo caching requests for some operations

提问人:Pierre Olivier Tran 提问时间:11/9/2023 最后编辑:Pierre Olivier Tran 更新时间:11/9/2023 访问量:21

问:

我在下一个.js应用程序中使用Apollo客户端实验性getClient。

export const { getClient } = registerApolloClient(
  () =>
    new ApolloClient({
      cache: new InMemoryCache(),
      link: new HttpLink({
        uri: `${apiBaseUrl}/graphql`,
      }),
    }),
);

我用它来处理我的登录突变,如下所示:

const { data } = await getClient().mutate({
  mutation: LOGIN_MUTATION,
  variables: {
    email,
    password,
  },
  fetchPolicy: "network-only",
});

不幸的是,该属性似乎不起作用:我的服务器返回的令牌始终相同,因此无法登录。fetchPolicy

到目前为止,我发现的唯一解决方法是更新我的客户端声明以包含以下内容:

fetchOptions: { cache: "no-store" },

但显然,我想缓存我的一些查询的结果。

下一个.js apollo客户端

评论


答:

0赞 Pierre Olivier Tran 11/9/2023 #1

服务器缓存似乎不考虑该选项。相反,您需要使用以下命令:fetchPolicy

const { data } = await getClient().mutate({
  mutation: MY_MUTATION,
  variables: {
    myVariable,
  },
  context: {
    fetchOptions: {
      // Do not cache the result of login mutation
      next: { revalidate: 0 },
    },
  },
});

这可确保始终重新验证数据。

评论

1赞 Michel Floyd 11/9/2023
fetch-policy 仅适用于客户端缓存。没有提到服务器端缓存。