![](/img/trans.png)
[英]How to best use ApolloClient / InMemoryCache and enable Cache on demand for API's?
[英]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.