[Performance] QueryClient initialized with default config — no retry logic, aggressive cache invalidation, poor offline UX
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Idoneità per principianti
- 48/100
- Tipo di issue
- Bug
- Chiarezza
- Abbastanza chiara
- Stato di attività
- Tranquilla
- Stack tecnologico
- react, tauri, typescript
- Ambito
- desktop, frontend, performance
Direzione di ricerca
Start by reading src/main.tsx to understand the existing QueryClient setup, then inspect App.tsx and current TanStack Query usage before choosing centralized error handling. Reproduce a failed request with network throttling, configure the requested retry and cache behavior, add the described boundary if appropriate, and verify that transient failures retry and recovered data is refreshed.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Description
The React application in src/main.tsx is wrapped with QueryClientProvider from TanStack Query, but the QueryClient is initialized with default configuration and no error handlers, retry logic, or cache strategies:
const queryClient = new QueryClient();
const container = document.getElementById("root");
const root = createRoot(container!);
root.render(
<QueryClientProvider client={queryClient}>
<ThemeProvider>
<App />
</ThemeProvider>
</QueryClientProvider>,
);
This means:
-
No retry logic on network failures: If an API request fails, TanStack Query will not retry automatically. A transient network error (timeout, temporary unavailability) will immediately show an error to the user instead of retrying.
-
No error boundary: Failed API requests have no centralized error handler. Each component must manually handle errors, leading to inconsistent error UI and potential crashes.
-
Aggressive cache invalidation: With default settings, cached data is discarded immediately, causing excessive API calls when navigating between views.
-
No stale-while-revalidate pattern: The app doesn't leverage TanStack Query's ability to show stale data while fetching fresh data in the background.
-
Missing mutation defaults: Form submissions and other mutations have no centralized error or success handling.
Users will experience:
- Frequent errors on weak network connections
- Slow performance due to redundant API calls
- Inconsistent error handling across screens
- Poor offline UX
Steps to Reproduce
- Open CommDesk on a slow or unstable network (simulate with browser DevTools throttling)
- Perform an API call (login, load community data, etc.)
- While the request is in flight, introduce a network error (disable network)
- Observe that the request fails immediately and shows an error to the user
- Re-enable network; the app does NOT retry automatically
Expected result: TanStack Query automatically retries failed requests with exponential backoff.
Actual result: Failed request shows error immediately with no retry.
Expected Behavior
QueryClient should be configured with:
- Default retry strategy (3 retries with exponential backoff for 5xx errors)
- Cache stale time (5 minutes before data is considered stale)
- Garbage collection time (10 minutes before unused cache is deleted)
- Default error handler for all queries and mutations
- Stale-while-revalidate behavior
Root Cause
QueryClient was initialized with defaults without considering the Tauri desktop environment, which has network instability concerns and limited bandwidth.
Proposed Fix
import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
import { createRoot } from "react-dom/client";
import { ThemeProvider } from "./theme/provider";
import App from "./App";
const queryClient = new QueryClient({
defaultOptions: {
queries: {
staleTime: 5 * 60 * 1000, // 5 minutes
gcTime: 10 * 60 * 1000, // 10 minutes (cache time)
retry: (failureCount, error) => {
// Retry on network errors and 5xx, but not on 4xx client errors
if (failureCount > 3) return false;
if (error instanceof Error && error.message.includes("401")) return false;
if (error instanceof Error && error.message.includes("403")) return false;
return true;
},
retryDelay: (attemptIndex) => Math.min(1000 * 2 ** attemptIndex, 30000),
},
mutations: {
retry: 1,
retryDelay: 1000,
},
},
});
const container = document.getElementById("root");
const root = createRoot(container!);
root.render(
<QueryClientProvider client={queryClient}>
<ThemeProvider>
<App />
</ThemeProvider>
</QueryClientProvider>,
);
Additionally, implement a global query error boundary in App.tsx:
import { useQueryErrorResetBoundary } from "@tanstack/react-query";
import { ErrorBoundary } from "react-error-boundary";
function App() {
const { reset } = useQueryErrorResetBoundary();
return (
<ErrorBoundary onReset={reset} fallback={<ErrorFallback />}>
{/* App content */}
</ErrorBoundary>
);
}
Environment
- File:
src/main.tsx - Severity: Medium (poor UX on network instability, excessive API calls)
Checklist
- I have searched existing issues and confirmed this is not a duplicate
- I have read the Contributing.md guidelines
- I have provided clear steps to reproduce the issue
- I have described expected vs. actual behavior clearly
- This issue title is clear and specific
- This repository has been verified as NSOC on https://www.nsoc.in/projects
@NexGenStudioDev Could you please /assign this issue to me? I would like to configure TanStack Query with proper defaults and error handling under NSOC '26.
/assign
- Lingua principale
- TypeScript
- Stelle
- 7
- Fork
- 17
- Metriche di merge delle PR
- Nessuna PR unita negli ultimi 30g
Preparare l'ambiente
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di NexGenStudioDev/CommDesk
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
NexGenStudioDev/CommDesk#140 ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
NexGenStudioDev/CommDesk#138 ·
-
[Bug] signup.ts: uploadCommunityLogo is a simulated stub that converts files to data URLs with no size or type validation, sending multi-megabyte base64 strings in the signup payloadForse di nuovo libera @anshul23102 l’ha presa 126 giorni fa e non c’è nessuna pull request aperta. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
NexGenStudioDev/CommDesk#130 · 2 commenti ·
-
Input text not visible in authentication formsForse di nuovo libera @anshul23102 l’ha presa 126 giorni fa e non c’è nessuna pull request aperta. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
NexGenStudioDev/CommDesk#123 · 2 commenti ·
-
[UX] Hardcoded window dimensions not DPI-aware — UI broken on high-DPI displaysForse già presa @anshul23102 l’ha presa 96 giorni fa. Aperta
NexGenStudioDev/CommDesk#141 · 1 assegnatario ·
Tutte le issue di NexGenStudioDev/CommDesk
Issue simili
-
cleanName keeps a state code that's joined to the word before it (SavannahGa → "Savannah Ga")Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 82/100
openwatersio/slackwater-database#281 ·
I maintainer di solito rispondono entro 1 giorno
-
accepted bug via-triage
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
pingdotgg/t3code#18690 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
Bayern feature:Application ready web
Difficoltà 2/5 1-3 ore Idoneità per principianti 67/100
digitalfabrik/entitlementcard#3176 ·
I maintainer di solito rispondono entro 7 giorni
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 82/100
NanmiCoder/cc-haha#1533 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
I maintainer di solito rispondono entro 1 giorno