![](/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.