0Pricing
React Academy · Lekcja

useOptimistic do natychmiastowego sprzężenia zwrotnego

Wyświetlanie optymistycznych aktualizacji interfejsu podczas wykonywania mutacji na serwerze za pomocą useOptimistic.

useOptimistic do natychmiastowego sprzężenia zwrotnego 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.

Wprowadzenie

W tej lekcji użyją Państwo hooka useOptimistic z React 19, aby natychmiast wyświetlać optymistyczne zmiany interfejsu podczas wykonywania operacji modyfikującej dane na serwerze, z automatycznym wycofaniem zmian w razie niepowodzenia.

Czym jest optymistyczny interfejs?

Optymistyczny interfejs zakłada, że operacja modyfikująca dane na serwerze zakończy się powodzeniem, i natychmiast aktualizuje interfejs bez oczekiwania na odpowiedź serwera. Jeśli operacja się nie powiedzie, stan zostaje przywrócony do poprzedniej wartości.

Podstawy useOptimistic

useOptimistic przyjmuje rzeczywisty stan oraz funkcję aktualizującą. Zwraca optymistyczny stan i funkcję służącą do stosowania optymistycznych aktualizacji.
'use client';
import { useOptimistic } from 'react';

const [optimisticLikes, addOptimisticLike] = useOptimistic(
  likes,                      // actual state from server
  (state, newLike) => [...state, newLike] // how to apply optimistic update
);

Przykład przycisku Like

Po kliknięciu Like przez użytkownika natychmiast wyświetl nową polubioną wartość w interfejsie za pomocą addOptimisticLike, a następnie wyślij właściwe żądanie. Jeśli żądanie się nie powiedzie, stan optymistyczny zostanie automatycznie przywrócony do rzeczywistego stanu.
async function handleLike() {
  addOptimisticLike({ id: Date.now(), user: currentUser });
  await likePost(postId); // server action
}

Gdzie przechowywany jest stan optymistyczny

optimisticLikes pokazuje wartość optymistyczną podczas przejścia. Gdy serwer odpowie, a rzeczywisty stan `likes` zostanie zaktualizowany (przez ponowną walidację), useOptimistic automatycznie zsynchronizuje go z rzeczywistym stanem.

Wskaźnik oczekiwania przy elementach optymistycznych

Oznaczaj elementy optymistyczne wizualnie (np. delikatnie je przyciemniając), aby użytkownicy wiedzieli, że są w trakcie przetwarzania. W optymistycznej aktualizacji możesz dodać flagę `pending: true` i odpowiednio ją ostylować.
const [optimisticMessages, addOptimistic] = useOptimistic(
  messages,
  (state, msg) => [...state, { ...msg, pending: true }]
);

// Render
{optimisticMessages.map(m => (
  <div key={m.id} style={{ opacity: m.pending ? 0.6 : 1 }}>{m.text}</div>
))}

Używanie wewnątrz przejścia

useOptimistic działa wyłącznie wewnątrz przejścia React (startTransition lub useTransition). W przypadku używania Server Actions z React 19 jest to obsługiwane automatycznie.
'use client';
import { startTransition } from 'react';

const handleSubmit = (data) => {
  startTransition(async () => {
    addOptimistic(data);
    await serverAction(data);
  });
};

Przykład wysyłania wiadomości na czacie

Wyświetlaj wysłaną wiadomość natychmiast na liście czatu, podczas gdy serwer zapisuje ją w tle. Wiadomość pojawia się od razu ze statusem „Sending...”, a po potwierdzeniu przez serwer zmienia status na „Sent”.

Wycofywanie zmian po błędzie

Jeśli Server Action zakończy się błędem (zgłosi wyjątek lub odrzuci promise), useOptimistic automatycznie odrzuci wartość optymistyczną i przywróci ostatni rzeczywisty stan. Nie trzeba implementować wycofywania zmian ręcznie.

useOptimistic a ręczne aktualizacje optymistyczne

Przed wprowadzeniem useOptimistic trzeba było zarządzać dwiema zmiennymi stanu (rzeczywistą i optymistyczną) oraz ręcznie wycofywać zmiany w bloku catch. useOptimistic łączy to w jeden hook z automatycznym wycofywaniem zmian.

Szybkie sprawdzenie

Co dzieje się ze stanem optymistycznym, jeśli Server Action, która go wywołała, zakończy się niepowodzeniem?

Podsumowanie

useOptimistic(actualState, updater) zwraca [optimisticState, addOptimistic]. Wywołaj addOptimistic przed Server Action, aby natychmiast pokazać zmianę. React automatycznie wycofuje zmianę, jeśli akcja się nie powiedzie. Hook działa wewnątrz React Transitions.

Kurs ukończony

Gratulacje! Ukończyli Państwo **Server Components & React 19 Features**. Rozumieją już Państwo RSC, hook use(), Actions, useActionState oraz useOptimistic, które są wykorzystywane we współczesnym programowaniu w React.

Często zadawane pytania

Czy lekcja „useOptimistic do natychmiastowego sprzężenia zwrotnego” jest bezpłatna?

Tak — pełny tekst „useOptimistic do natychmiastowego sprzężenia zwrotnego” 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 „useOptimistic do natychmiastowego sprzężenia zwrotnego”?

Wyświetlanie optymistycznych aktualizacji interfejsu podczas wykonywania mutacji na serwerze za pomocą useOptimistic. Ć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 „useOptimistic do natychmiastowego sprzężenia zwrotnego”?

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

  1. Komponenty serwerowe React — wyjaśnienie
  2. Hook use() do zasobów asynchronicznych
  3. Akcje React i useActionState
  4. useOptimistic do natychmiastowego sprzężenia zwrotnego
← Powrót do React Academy