0Pricing
React Academy · Lezione

Pattern ottimistici con React Query e Zustand

Usare i callback onMutate/onError/onSettled di React Query e Zustand per flussi di lavoro strutturati con UI ottimistica

Pattern ottimistici con React Query e Zustand è una lezione React Academy gratuita su CoddyKit. Questa è la lezione 4 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento React Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso React Academy include 4 lezioni in totale.

Panoramica di useMutation di React Query

L'hook useMutation di React Query fornisce un'infrastruttura integrata per gli aggiornamenti ottimistici tramite tre callback del ciclo di vita: onMutate (viene eseguita prima della mutazione e restituisce un oggetto di contesto), onError (viene eseguita in caso di errore e riceve il contesto) e onSettled (viene eseguita in caso di successo o errore). Questa struttura è progettata specificamente per i pattern ottimistici.

onMutate: la fase dell'aggiornamento ottimistico

In onMutate, esegua tre passaggi: innanzitutto annulli le query in corso per i dati interessati (await queryClient.cancelQueries({ queryKey })), quindi salvi uno snapshot della cache corrente (queryClient.getQueryData(queryKey)) e infine applichi l'aggiornamento ottimistico alla cache (queryClient.setQueryData(queryKey, updater)). Restituisca lo snapshot come contesto.

onError: eseguire il rollback con il contesto

La callback onError riceve l'errore, le variabili della mutazione e il contesto restituito da onMutate. Usi il contesto per eseguire il rollback: queryClient.setQueryData(queryKey, context.previousData). Il contesto fa da collegamento tra lo snapshot acquisito in onMutate e il rollback in onError.

onSettled: eseguire il refetch per la sincronizzazione

La callback onSettled viene eseguita indipendentemente dal successo o dall'errore. La usi per eseguire il refetch della query e sincronizzarla con lo stato del server: queryClient.invalidateQueries({ queryKey }). In questo modo, dopo qualsiasi mutazione — sia riuscita (il server potrebbe aver trasformato i dati) sia fallita (rollback completato) — si converge infine sullo stato effettivo del server.

Alternare lo stato di un todo con React Query

Un esempio pratico: alternare lo stato completato di un todo. In onMutate, salvi uno snapshot dell'elenco dei todo, quindi aggiorni lo specifico todo nella cache. In onError, ripristini lo snapshot dal contesto. In onSettled, invalidi la query dei todo per eseguire il refetch. L'utente vede il cambio immediatamente; il server si sincronizza in background.

Aggiornamenti ottimistici con Zustand

In uno store Zustand, gli aggiornamenti ottimistici sono semplici: crei un'azione updateItem(id, changes) che aggiorna immediatamente l'elemento nello store, quindi chiama l'API. Se l'API non riesce, chiami un'altra azione revertItem(id, previousState). Gli aggiornamenti sincroni dello stato di Zustand rendono immediato il passaggio ottimistico.

Immer con Zustand per aggiornamenti complessi

Quando aggiorna ottimisticamente uno stato Zustand profondamente annidato, usi produce di Immer per eseguire mutazioni più leggibili: set(produce(state => { state.items[id] = { ...state.items[id], ...changes } })). Immer gestisce gli aggiornamenti immutabili con una sintassi mutabile, rendendo leggibili e sicure le modifiche a stati annidati complessi.

Hook useOptimistic di React 19

React 19 ha introdotto useOptimistic(state, updateFn) come hook integrato per gli aggiornamenti ottimistici all'interno delle Server Actions. const [optimisticState, addOptimistic] = useOptimistic(items, (state, newItem) => [...state, newItem]). La chiamata a addOptimistic(newItem) aggiorna immediatamente l'interfaccia mentre la Server Action viene eseguita in modo asincrono.

Rollback automatico di useOptimistic

useOptimistic gestisce automaticamente il rollback. Quando la Server Action viene completata (con successo o con un errore), React ripristina lo stato ottimistico e applica lo stato reale del server. Non è necessario scrivere manualmente la logica di rollback: React gestisce il ciclo di vita dell'aggiornamento ottimistico all'interno del boundary di Suspense dell'azione.

Confronto tra i tre approcci

Gli aggiornamenti ottimistici manuali offrono il pieno controllo, ma richiedono codice ripetitivo. onMutate/onError/onSettled di React Query si integra con la cache delle query per la sincronizzazione automatica. useOptimistic è la soluzione più semplice per le Server Actions, ma richiede React 19 e un'architettura basata sulle Server Actions. Scelga in base al data layer: manuale per lo stato locale semplice, React Query per le API REST, useOptimistic per RSC/Server Actions.

Scegliere il pattern giusto

Quando sceglie un pattern ottimistico, consideri la sua architettura. Se usa React Query in tutta l'app, il suo pattern onMutate è coerente e tiene conto della cache. Se usa Zustand per lo stato globale, il pattern basato sulle azioni si integra naturalmente. Se usa React 19 con Server Actions, useOptimistic è la scelta idiomatica. Mescolare i pattern all'interno della stessa app è comune e accettabile.

Valore restituito da onMutate di React Query

Che cosa dovrebbe restituire la callback onMutate di React Query per consentire il rollback in onError?

Riepilogo della lezione: pattern ottimistici

React Query useMutation usa onMutate (annulla le query, salva uno snapshot, applica l'aggiornamento ottimistico e restituisce il contesto), onError (ripristina lo snapshot dal contesto) e onSettled (invalida la query per eseguire il refetch). Gli aggiornamenti ottimistici di Zustand chiamano immediatamente l'azione dello stato e poi l'API, eseguendo il ripristino in caso di errore. React 19 useOptimistic offre il rollback automatico all'interno delle Server Actions. Scelga il pattern più adatto all'architettura del suo data layer.

Domande Frequenti

La lezione «Pattern ottimistici con React Query e Zustand» è gratuita?

Sì — il testo completo di «Pattern ottimistici con React Query e Zustand» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso React Academy, passa a CoddyKit PRO. Il corso React Academy include 4 lezioni in totale.

Cosa imparerò in «Pattern ottimistici con React Query e Zustand»?

Usare i callback onMutate/onError/onSettled di React Query e Zustand per flussi di lavoro strutturati con UI ottimistica Eserciti React Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare React Academy?

Non è richiesta alcuna esperienza precedente. React Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 4 di 4.

Quanto tempo richiede la lezione «Pattern ottimistici con React Query e Zustand»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione React Academy?

Sì. Ogni lezione React Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Che cos'è una UI ottimistica e quando usarla
  2. Implementare manualmente gli aggiornamenti ottimistici
  3. Rollback in caso di errore e risoluzione dei conflitti
  4. Pattern ottimistici con React Query e Zustand
← Torna a React Academy