Clear the query cache when the signed-in account changes

Logging out or switching accounts kept the previous user's React Query
cache (follows, feed, cloud, e621 pages), so the new account briefly
saw the old one's followed tags/pools until each query refetched. The
query client now lives in lib/queryClient.ts and login/register/logout
clear it alongside the e621 credential store.
This commit is contained in:
2026-09-17 14:41:56 -05:00
parent 62561a13f3
commit e95dc5f265
3 changed files with 21 additions and 12 deletions
+12
View File
@@ -0,0 +1,12 @@
import { QueryClient } from "@tanstack/react-query";
export const queryClient = new QueryClient({
defaultOptions: {
queries: {
retry: 1,
staleTime: 30_000,
gcTime: 30 * 60_000,
refetchOnWindowFocus: false,
},
},
});
+2 -12
View File
@@ -1,21 +1,11 @@
import { QueryClient, QueryClientProvider } from "@tanstack/react-query"; import { QueryClientProvider } from "@tanstack/react-query";
import { StrictMode } from "react"; import { StrictMode } from "react";
import { createRoot } from "react-dom/client"; import { createRoot } from "react-dom/client";
import { BrowserRouter } from "react-router-dom"; import { BrowserRouter } from "react-router-dom";
import App from "./App"; import App from "./App";
import "./index.css"; import "./index.css";
import { queryClient } from "@/lib/queryClient";
const queryClient = new QueryClient({
defaultOptions: {
queries: {
retry: 1,
staleTime: 30_000,
gcTime: 30 * 60_000,
refetchOnWindowFocus: false,
},
},
});
createRoot(document.getElementById("root")!).render( createRoot(document.getElementById("root")!).render(
<StrictMode> <StrictMode>
+7
View File
@@ -1,6 +1,7 @@
import { create } from "zustand"; import { create } from "zustand";
import { api, getToken, setToken } from "@/lib/api"; import { api, getToken, setToken } from "@/lib/api";
import { queryClient } from "@/lib/queryClient";
import type { User } from "@/lib/types"; import type { User } from "@/lib/types";
import { useE621 } from "@/store/e621"; import { useE621 } from "@/store/e621";
@@ -24,6 +25,9 @@ export const useAuth = create<AuthState>((set) => ({
}); });
setToken(data.token); setToken(data.token);
const user = await api<User>("/api/auth/me/"); const user = await api<User>("/api/auth/me/");
// Never show the previous account's cached data to this one.
queryClient.clear();
useE621.getState().clear();
set({ user, ready: true }); set({ user, ready: true });
}, },
@@ -33,6 +37,8 @@ export const useAuth = create<AuthState>((set) => ({
json: { username, password }, json: { username, password },
}); });
setToken(data.token); setToken(data.token);
queryClient.clear();
useE621.getState().clear();
set({ user: data.user, ready: true }); set({ user: data.user, ready: true });
}, },
@@ -43,6 +49,7 @@ export const useAuth = create<AuthState>((set) => ({
// The token may already be invalid; clearing it locally is enough. // The token may already be invalid; clearing it locally is enough.
} }
setToken(null); setToken(null);
queryClient.clear();
useE621.getState().clear(); useE621.getState().clear();
set({ user: null, ready: true }); set({ user: null, ready: true });
}, },