繁体   English   中英

检查现有的 ApolloClient 实例以清除缓存?

[英]Check for existing instance of ApolloClient to clear cache?

我们在主“应用程序”中有一个 React/GraphQL 应用程序。 当用户注销时,我们要清除 GQL 缓存。 但是,注销功能存在于包装应用程序中,而不是 React 应用程序中。

当我们重新登录时缓存没有被清除,这是需要解决的。 关于如何解决这个问题的几个问题:

1) 当 React 应用尝试创建新实例时,我们可以检查缓存吗? 我们可以添加一个“版本”标志吗?

const client = new ApolloClient({
  link: authLink.concat(restLink),
  cache: () => {
    if (client.cache) {
      client.cache.reset()
    }
    return new InMemoryCache();
  }
});

2)或者我们可以通过任何其他window或全局object找到现有的客户端App吗? 3)反应应用程序是否应该将客户端设置为本地 state 的一部分,然后将客户端与useRef进行比较? 如果他们不匹配,然后重置?

接受建议...

清除缓存的官方方法是在客户端实例中调用resetStore 您可以使用例如useApolloClient 钩子在 Apollo 上下文中的任何组件内获取客户端实例

function MyLogoutButton() {
  const client = useApolloClient();
  const onLogout = () => {
    backend.logout();
    client.resetStore();
  };
  return <button onClick={onLogout}>Logout</button>;
}

也许这正在做你想做的事。 您似乎正在尝试创建客户端的新实例,但这不是必需的。 resetStore方法正是为这个用例而构建的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM