0Pricing
React Academy · Lekcja

Hook use() do zasobów asynchronicznych

Odczytywanie promise'ów i kontekstu podczas renderowania za pomocą hooka use() w React 19.

Hook use() do zasobów asynchronicznych to bezpłatna lekcja React Academy na CoddyKit. To lekcja 2 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 nauczysz się używać hooka use() z React 19 do bezpośredniego odczytywania obietnic i wartości kontekstu wewnątrz funkcji renderującej, co upraszcza dostęp do danych asynchronicznych.

Czym jest use()?

use() to hook React 19, który synchronicznie odczytuje zasób — Promise lub Context — w funkcji renderującej. Jeśli Promise jest w toku, komponent zostaje wstrzymany, a najbliższa granica Suspense wyświetla swój fallback.
import { use } from 'react';

function UserProfile({ userPromise }) {
  const user = use(userPromise); // suspends if pending
  return <h1>{user.name}</h1>;
}

Przekazywanie Promise jako props

Typowy wzorzec w React 19 wygląda tak: komponent serwerowy tworzy Promise (np. zapytanie do bazy danych), przekazuje go komponentowi klienckiemu, a komponent kliencki odczytuje go za pomocą use(). Granica Suspense może znajdować się w dowolnym miejscu powyżej.
// Server Component
export default function Page() {
  const userPromise = fetchUser(1); // NOT awaited
  return (
    <Suspense fallback={<Spinner />}>
      <Profile userPromise={userPromise} />
    </Suspense>
  );
}

// Client Component
'use client';
export function Profile({ userPromise }) {
  const user = use(userPromise);
  return <p>{user.name}</p>;
}

use() a useEffect do obsługi danych

Pobieranie danych za pomocą useEffect wymaga ręcznego zarządzania stanem ładowania i błędu. use() wraz z Suspense usuwa cały ten kod pomocniczy — ciało komponentu po prostu odczytuje dane tak, jakby były synchroniczne.

use() do obsługi Context

use() może również odczytywać wartości Context, podobnie jak useContext. Różnica polega na tym, że use() można wywoływać warunkowo (wewnątrz instrukcji if i pętli), w przeciwieństwie do useContext, które podlega regułom Hooks.
import { use } from 'react';
import { ThemeContext } from './ThemeContext';

function Button({ danger }) {
  if (danger) {
    const theme = use(ThemeContext); // conditional — allowed with use()!
    return <button style={{ color: theme.red }}>Delete</button>;
  }
  return <button>Click</button>;
}

Obsługa błędów za pomocą ErrorBoundary

Jeśli Promise przekazany do use() zostanie odrzucony, React zgłosi błąd. Owiń komponent komponentem ErrorBoundary, aby przechwycić błąd i wyświetlić fallback.
<ErrorBoundary fallback={<Error />}>
  <Suspense fallback={<Loading />}>
    <Profile userPromise={fetchUser(id)} />
  </Suspense>
</ErrorBoundary>

use() tylko w komponentach klienckich

use() z Promise działa w komponentach klienckich. W komponentach serwerowych używaj bezpośrednio async/await — na serwerze nie ma potrzeby używania use() z Promise.

Buforowanie Promise

Jeśli komponent renderuje się ponownie, musi otrzymać tę samą referencję Promise, aby uniknąć ponownego pobierania danych. Twórz Promise poza komponentem lub w stabilnym miejscu (na serwerze, w cache’u albo w stanie) i przekazuj go jako props.

Strumieniowanie z use()

Połączenie use() ze strumieniowaniem SSR pozwala Reactowi strumieniowo wysyłać HTML strony, wyświetlić fallback Suspense, a następnie wysłać wyrenderowaną treść, gdy Promise zostanie rozstrzygnięty — wszystko w ramach jednego połączenia HTTP.

React.cache() na potrzeby deduplikacji

Na serwerze React.cache() (lub unstable_cache z Next.js) deduplikuje wielokrotne wywołania tej samej funkcji asynchronicznej podczas jednego renderowania, dzięki czemu baza danych jest odpytywana tylko raz, nawet jeśli wiele komponentów korzysta z tej samej promise.

Szybkie sprawdzenie

Co robi Client Component, gdy wywołano use(promise), a promise jest nadal w toku?

Podsumowanie

use(promise) odczytuje dane asynchroniczne synchronicznie podczas renderowania i wstrzymuje renderowanie, jeśli dane są nadal pobierane. use(context) działa warunkowo, w przeciwieństwie do useContext. Zawsze używaj go razem z Suspense do obsługi ładowania oraz z ErrorBoundary do obsługi błędów.

Następny temat

Następna lekcja: **React Actions & useActionState** — zdefiniują Państwo akcje serwerowe i klienckie oraz będą obsługiwać wysyłanie formularzy ze stanem oczekiwania.

Często zadawane pytania

Czy lekcja „Hook use() do zasobów asynchronicznych” jest bezpłatna?

Tak — pełny tekst „Hook use() do zasobów asynchronicznych” 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 „Hook use() do zasobów asynchronicznych”?

Odczytywanie promise'ów i kontekstu podczas renderowania za pomocą hooka use() w React 19. Ć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 2 z 4.

Ile czasu zajmuje lekcja „Hook use() do zasobów asynchronicznych”?

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