Wzorce optymistyczne z React Query i Zustand
Używać callbacków onMutate/onError/onSettled React Query oraz Zustand do uporządkowanych przepływów optymistycznego interfejsu
Wzorce optymistyczne z React Query i Zustand to bezpłatna lekcja React Academy na CoddyKit. To lekcja 4 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej React Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs React Academy zawiera 4 lekcji w sumie.
Przegląd useMutation w React Query
Hook useMutation biblioteki React Query zapewnia wbudowaną infrastrukturę do optymistycznych aktualizacji za pomocą trzech wywołań zwrotnych cyklu życia: onMutate (wywoływane przed mutacją, zwraca obiekt context), onError (wywoływane po niepowodzeniu, otrzymuje context) oraz onSettled (wywoływane po powodzeniu lub niepowodzeniu). Ta struktura została zaprojektowana specjalnie z myślą o wzorcach optymistycznych.
onMutate: faza optymistycznej aktualizacji
W onMutate wykonaj trzy kroki: najpierw anuluj wszystkie trwające zapytania dotyczące danych, których dotyczy zmiana (await queryClient.cancelQueries({ queryKey })), następnie utwórz migawkę bieżącej pamięci podręcznej (queryClient.getQueryData(queryKey)), a na końcu zastosuj optymistyczną aktualizację w pamięci podręcznej (queryClient.setQueryData(queryKey, updater)). Zwróć migawkę jako context.
onError: wycofywanie zmian za pomocą context
Wywołanie zwrotne onError otrzymuje błąd, zmienne mutacji oraz context zwrócony z onMutate. Użyj context do wycofania zmian: queryClient.setQueryData(queryKey, context.previousData). Context jest łącznikiem między migawką utworzoną w onMutate a wycofaniem zmian w onError.
onSettled: ponowne pobieranie w celu synchronizacji
Wywołanie zwrotne onSettled jest uruchamiane niezależnie od powodzenia lub niepowodzenia. Użyj go do ponownego pobrania zapytania i synchronizacji ze stanem serwera: queryClient.invalidateQueries({ queryKey }). Dzięki temu po każdej mutacji — niezależnie od tego, czy zakończyła się powodzeniem, czy niepowodzeniem — stan ostatecznie zbiegnie się z rzeczywistym stanem serwera.
Optymistyczne przełączanie todo w React Query
Praktyczny przykład to przełączanie stanu ukończenia todo. W onMutate utwórz migawkę listy todo, a następnie zaktualizuj konkretne todo w pamięci podręcznej. W onError przywróć migawkę z context. W onSettled unieważnij zapytanie dotyczące todo, aby ponownie pobrać dane. Użytkownik natychmiast widzi zmianę, a synchronizacja z serwerem odbywa się w tle.
Optymistyczne aktualizacje w Zustand
W magazynie Zustand optymistyczne aktualizacje są proste: utwórz akcję updateItem(id, changes), która natychmiast aktualizuje element w magazynie, a następnie wywołuje API. Jeśli API zakończy się niepowodzeniem, wywołaj inną akcję revertItem(id, previousState). Synchroniczne aktualizacje stanu w Zustand sprawiają, że krok optymistyczny jest natychmiastowy.
Immer z Zustand w przypadku złożonych aktualizacji
Podczas optymistycznej aktualizacji głęboko zagnieżdżonego stanu Zustand użyj funkcji produce biblioteki Immer, aby uzyskać czytelną składnię mutacji: set(produce(state => { state.items[id] = { ...state.items[id], ...changes } })). Immer obsługuje niezmienne aktualizacje za pomocą składni mutującej, dzięki czemu złożone zmiany zagnieżdżonego stanu są czytelne i bezpieczne.
Hook React 19 useOptimistic
React 19 wprowadził wbudowany hook useOptimistic(state, updateFn) do obsługi optymistycznych aktualizacji w ramach Server Actions. const [optimisticState, addOptimistic] = useOptimistic(items, (state, newItem) => [...state, newItem]). Wywołanie addOptimistic(newItem) natychmiast aktualizuje interfejs, podczas gdy akcja serwera jest wykonywana asynchronicznie.
Automatyczne wycofywanie zmian w useOptimistic
useOptimistic automatycznie obsługuje wycofywanie zmian. Po zakończeniu Server Action — powodzeniem lub błędem — React przywraca stan optymistyczny i stosuje rzeczywisty stan z serwera. Nie trzeba pisać ręcznej logiki wycofywania zmian, ponieważ React zarządza cyklem życia optymistycznej aktualizacji w ramach granicy Suspense akcji.
Porównanie trzech podejść
Ręczne optymistyczne aktualizacje zapewniają pełną kontrolę, ale wymagają dodatkowego kodu. React Query onMutate/onError/onSettled integruje się z pamięcią podręczną zapytań i automatycznie synchronizuje dane. useOptimistic jest najprostszym rozwiązaniem dla Server Actions, ale wymaga React 19 i architektury opartej na akcjach serwera. Wybierz rozwiązanie odpowiednie dla warstwy danych: ręczne aktualizacje dla prostego stanu lokalnego, React Query dla interfejsów REST API, a useOptimistic dla RSC/Server Actions.
Wybór właściwego wzorca
Wybierając wzorzec optymistyczny, uwzględnij swoją architekturę. Jeśli korzystasz z React Query w całej aplikacji, wzorzec onMutate jest spójny i uwzględnia pamięć podręczną. Jeśli używasz Zustand do zarządzania stanem globalnym, naturalnie pasuje do niego wzorzec oparty na akcjach. Jeśli korzystasz z React 19 i Server Actions, useOptimistic jest idiomatycznym wyborem. Łączenie wzorców w jednej aplikacji jest powszechne i dopuszczalne.
Wartość zwracana przez React Query onMutate
Co powinno zwracać wywołanie zwrotne onMutate w React Query, aby umożliwić wycofanie zmian w onError?
Podsumowanie lekcji: wzorce optymistyczne
React Query useMutation korzysta z onMutate (anulowanie zapytań, utworzenie migawki, zastosowanie optymistycznej aktualizacji i zwrócenie context), onError (przywrócenie migawki z context) oraz onSettled (unieważnienie zapytania w celu ponownego pobrania danych). Optymistyczne aktualizacje w Zustand natychmiast wywołują akcję stanu, a następnie API, i wycofują zmiany w razie niepowodzenia. React 19 useOptimistic zapewnia automatyczne wycofywanie zmian w ramach Server Actions. Wybierz wzorzec pasujący do architektury warstwy danych.
Często zadawane pytania
Czy lekcja „Wzorce optymistyczne z React Query i Zustand” jest bezpłatna?
Tak — pełny tekst „Wzorce optymistyczne z React Query i Zustand” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu React Academy, przejdź na CoddyKit PRO. Kurs React Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Wzorce optymistyczne z React Query i Zustand”?
Używać callbacków onMutate/onError/onSettled React Query oraz Zustand do uporządkowanych przepływów optymistycznego interfejsu Ćwiczysz React Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć React Academy?
Nie wymagamy żadnego doświadczenia. React Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 4 z 4.
Ile czasu zajmuje lekcja „Wzorce optymistyczne z React Query i Zustand”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji React Academy?
Tak. Każda lekcja React Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Czym jest optymistyczny interfejs i kiedy go używać
- Ręczne implementowanie optymistycznych aktualizacji
- Wycofywanie zmian po błędzie i rozwiązywanie konfliktów
- Wzorce optymistyczne z React Query i Zustand