簡體   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