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

时间:2020-04-20 19:10:28

标签: reactjs graphql

我们在主“应用”内部有一个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进行比较?如果它们不匹配,那么要重置吗?

接受建议...

1 个答案:

答案 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方法正是为此用例而构建的。