0Pricing
React Academy · Lekcja

Komponenty wyższego rzędu (HOC) — wyjaśnienie

Opakowywanie komponentów w celu wstrzykiwania propsów, ochrony tras lub dodawania logowania za pomocą fabryk HOC.

Komponenty wyższego rzędu (HOC) — wyjaśnienie 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.

Witamy

W tej lekcji zrozumieją Państwo działanie komponentów wyższego rzędu (HOC), nauczą się je tworzyć, poznają typowe zastosowania oraz kompromisy w porównaniu z hookami.

Czym jest HOC?

Higher-Order Component to funkcja, która przyjmuje komponent jako dane wejściowe i zwraca nowy, rozszerzony komponent. HOC dodaje zachowanie (takie jak właściwości, sprawdzanie uwierzytelnienia lub logowanie) bez modyfikowania oryginalnego komponentu.
// HOC signature
function withEnhancement(WrappedComponent) {
  return function Enhanced(props) {
    // add behaviour here
    return <WrappedComponent {...props} extraProp="value" />;
  };
}

HOC chroniący dostęp

Typowy HOC przekierowuje nieuwierzytelnionych użytkowników na stronę logowania. Oryginalny komponent nie musi znać logiki uwierzytelniania.
function withAuth(Component) {
  return function AuthGuard(props) {
    const isLoggedIn = useAuth();
    if (!isLoggedIn) return <Navigate to="/login" />;
    return <Component {...props} />;
  };
}

const ProtectedPage = withAuth(DashboardPage);

HOC do logowania

HOC może rejestrować każde renderowanie wraz z nazwą komponentu i właściwościami, co ułatwia debugowanie. Owińcie Państwo dowolny komponent za pomocą withLogger, aby dodać śledzenie.
function withLogger(Component) {
  return function Logged(props) {
    console.log('[render]', Component.displayName, props);
    return <Component {...props} />;
  };
}

Przekazywanie właściwości

Należy zawsze przekazywać wszystkie otrzymane właściwości do opakowanego komponentu za pomocą `{...props}`. Pominięcie tego kroku psuje API oryginalnego komponentu.
return function HOC(props) {
  return <WrappedComponent {...props} injectedProp={value} />;
};

Ustawianie displayName

Komponenty zwracane przez HOC tracą swoją nazwę w React DevTools. Należy ustawić znaczącą wartość displayName, aby można było je rozpoznać w drzewie komponentów.
function withAuth(Component) {
  function AuthGuard(props) { /* ... */ }
  AuthGuard.displayName = 'withAuth(' + (Component.displayName || Component.name) + ')';
  return AuthGuard;
}

Przekazywanie referencji

HOC domyślnie blokują referencje. Należy użyć `React.forwardRef` wewnątrz HOC, aby przekazać referencje do opakowanego komponentu.
function withStyle(Component) {
  return React.forwardRef(function (props, ref) {
    return <Component ref={ref} {...props} className="styled" />;
  });
}

HOC a render props i hooki

HOC wstrzykują właściwości i mogą chronić trasy. Render props przekazują dynamiczny interfejs użytkownika. Custom hooks wydzielają logikę. We współczesnym React preferowane są hooki, ponieważ pozwalają uniknąć piekła wrapperów i łatwiej je komponować. HOC są przydatne w przypadku komponentów klasowych lub integracji z bibliotekami zewnętrznymi.

Piekło wrapperów

Zastosowanie wielu HOC tworzy głębokie zagnieżdżenie w drzewie komponentów: `withTheme(withAuth(withLogger(MyPage)))`. DevTools pokazuje wiele anonimowych warstw wrapperów. Hooki całkowicie pozwalają tego uniknąć.

HOC w praktyce

`connect()` z Redux, `withRouter()` z React Router v5 oraz `observer()` z MobX to HOC. Zrozumienie HOC ułatwia pracę ze starszymi interfejsami API tych bibliotek.

Szybkie sprawdzenie

Co komponent wyższego rzędu musi zawsze zrobić z otrzymanymi właściwościami?

Podsumowanie

HOC to funkcje, które przyjmują komponent i zwracają jego rozszerzoną wersję. Wstrzykują właściwości, chronią trasy i dodają logowanie. Należy zawsze przekazywać właściwości za pomocą spread, ustawiać displayName i przekazywać referencje. We współczesnym React preferowane są hooki.

Następny temat

Następna lekcja: **HOC vs Render Props vs Custom Hooks** — porównają Państwo trzy strategie współdzielenia kodu pod kątem czytelności, testowania i kompozycji.

Często zadawane pytania

Czy lekcja „Komponenty wyższego rzędu (HOC) — wyjaśnienie” jest bezpłatna?

Tak — pełny tekst „Komponenty wyższego rzędu (HOC) — wyjaśnienie” 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 „Komponenty wyższego rzędu (HOC) — wyjaśnienie”?

Opakowywanie komponentów w celu wstrzykiwania propsów, ochrony tras lub dodawania logowania za pomocą fabryk HOC. Ć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 „Komponenty wyższego rzędu (HOC) — wyjaśnienie”?

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. Wzorzec Render Props
  2. Komponenty wyższego rzędu (HOC) — wyjaśnienie
  3. HOC a Render Props i Custom Hooks
  4. Refaktoryzacja HOC do Custom Hooka
← Powrót do React Academy