我们在主“应用”内部有一个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)还是可以通过任何其他窗口或全局对象找到现有的客户端应用程序?
3)react app是否应该将客户端设置为本地状态的一部分,然后将客户端与useRef
进行比较?如果它们不匹配,那么要重置吗?
接受建议...
答案 0 :(得分:1)
清除缓存的官方方法是在客户端实例中使用calling resetStore
。您可以使用例如在Apollo上下文中的任何组件内部获取客户端实例。 useApolloClient
hook
function MyLogoutButton() {
const client = useApolloClient();
const onLogout = () => {
backend.logout();
client.resetStore();
};
return <button onClick={onLogout}>Logout</button>;
}
也许这是您想要做的。您似乎正在尝试创建客户端的新实例,但这不是必需的。 resetStore
方法正是为此用例而构建的。