我们在一个主" app“中有一个React/GraphQL app。当用户注销时,我们希望清除GQL缓存。但是,注销功能存在于包装器应用程序中,而不是React应用程序中。
当我们重新登录时,缓存没有被清除,这是需要解决的。关于如何解决这个问题,有几个问题:
1)当React应用程序尝试创建新实例时,我们可以检查缓存吗?有没有可以添加的“版本”标志?
const client = new ApolloClient({
link: authLink.concat(restLink),
cache: () => {
if (client.cache) {
client.cache.reset()
}
return new InMemoryCache();
}
});2)或者我们可以通过任何其他窗口或全局对象找到现有的客户端应用程序吗? 3) react应用程序是否应该将客户端设置为本地状态的一部分,然后将客户端与useRef进行比较?如果它们不匹配,那么重置?
欢迎您的建议...
发布于 2020-04-21 07:01:42
清除缓存的官方方法是客户端实例中的calling resetStore。通过使用例如useApolloClient hook,您可以在Apollo上下文中的任何组件中获取客户端实例
function MyLogoutButton() {
const client = useApolloClient();
const onLogout = () => {
backend.logout();
client.resetStore();
};
return <button onClick={onLogout}>Logout</button>;
}也许这就是你想做的事情。您似乎正在尝试创建客户端的新实例,但这并不是必需的。resetStore方法就是为这个用例构建的。
https://stackoverflow.com/questions/61330184
复制相似问题