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

2o7dmzc5  于 2023-11-18  发布在  其他
关注(0)|答案(1)|浏览(128)

我在一个next.js应用程序中使用Apollo Client实验性的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" },


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

guicsvcw

guicsvcw1#

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

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

字符串
这确保了数据总是被重新验证。

相关问题