0Pricing
React Academy · Lekcja

Debugowanie typowych błędów React

Diagnozuj ostrzeżenia o brakujących kluczach, błędy niezdefiniowanego stanu i błędy hydracji

Debugowanie typowych błędów React 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 dowiedzą się Państwo, jak diagnozować najczęstsze błędy React: ostrzeżenia o brakujących kluczach, błędy związane ze stanem `undefined`, zbyt wiele ponownych renderowań oraz niezgodności hydratacji.

Ostrzeżenie o brakującym kluczu

React zapisuje w logach: *Każdy element potomny na liście powinien mieć unikalną właściwość „key”.* Dzieje się tak, gdy renderują Państwo tablicę bez dodania właściwości `key`. Aby to naprawić, należy dodać do każdego elementu listy stabilny, unikalny klucz.
// Bad
items.map(item => <li>{item.name}</li>)

// Good
items.map(item => <li key={item.id}>{item.name}</li>)

Nie można odczytać właściwości wartości undefined

Ten błąd często oznacza, że podczas pierwszego renderowania stan ma wartość `undefined`. Należy zawsze inicjalizować stan bezpieczną wartością domyślną (`[]` dla tablic, `{}` dla obiektów, `null` dla wartości sprawdzanych przed użyciem).
// Bad — crashes if data is undefined
const [data, setData] = useState();
return <p>{data.name}</p>;

// Good
const [data, setData] = useState(null);
return data ? <p>{data.name}</p> : <p>Loading...</p>;

Błąd zbyt wielu ponownych renderowań

React zgłasza błąd *Zbyt wiele ponownych renderowań*, gdy komponent wchodzi w nieskończoną pętlę renderowania — zwykle dlatego, że `setState` jest bezwarunkowo wywoływane podczas renderowania lub że bezpośrednio jako props przekazano funkcję inline `() => setState(...)`, która uruchamia aktualizację przy każdym renderowaniu.
// Bad — setState called on every render
function Counter() {
  const [n, setN] = useState(0);
  setN(n + 1); // infinite loop!
  return <p>{n}</p>;
}

Naprawianie problemu zbyt wielu ponownych renderowań

Należy przenieść aktualizacje stanu do funkcji obsługi zdarzeń lub useEffect. Nigdy nie należy wywoływać setState bezpośrednio na najwyższym poziomie treści komponentu.
// Good — update only on click
function Counter() {
  const [n, setN] = useState(0);
  return <button onClick={() => setN(n + 1)}>{n}</button>;
}

Ostrzeżenie o niezgodności hydratacji

W aplikacjach SSR React ostrzega: *Hydratacja nie powiodła się, ponieważ początkowy interfejs użytkownika różni się od tego wyrenderowanego na serwerze.* Typowe przyczyny to użycie `Date.now()` lub `Math.random()` podczas renderowania albo rozszerzenia przeglądarki wstrzykujące kod HTML.

Naprawianie niezgodności hydratacji

Należy przenieść dynamiczne wartości (znaczniki czasu, losowe identyfikatory) do `useState` inicjalizowanego wewnątrz `useEffect`, aby serwer zawsze renderował wartość statyczną, a klient aktualizował ją po zamontowaniu.
const [ts, setTs] = useState('');
useEffect(() => {
  setTs(Date.now().toString());
}, []);
return <p>{ts}</p>;

Stan nie aktualizuje się natychmiast

Należy pamiętać, że `setState` działa asynchronicznie. Logowanie stanu natychmiast po jego wywołaniu pokazuje starą wartość. Aby zobaczyć zaktualizowaną wartość, należy logować ją wewnątrz `useEffect`, który ma zmienną stanu w tablicy zależności.
const [count, setCount] = useState(0);

function handleClick() {
  setCount(count + 1);
  console.log(count); // still old value!
}

useEffect(() => {
  console.log('updated:', count); // correct
}, [count]);

Komponent nie aktualizuje się po zmianie propsa

Jeśli komponent nie aktualizuje się po zmianie propsa, należy sprawdzić, czy obiekt lub tablica nie są modyfikowane bezpośrednio. React korzysta z porównywania referencji — modyfikacja istniejącego obiektu nie wywołuje ponownego renderowania.
// Bad — same reference, no re-render
const list = [];
list.push('item');
setList(list);

// Good — new array reference
setList([...list, 'item']);

Odczytywanie błędów w nakładce błędów

Gdy aplikacja React ulega awarii podczas tworzenia w środowisku deweloperskim, w przeglądarce pojawia się nakładka błędów. Proszę przeczytać **stos komponentów** na dole — pokazuje on każdy komponent, który wyrenderował komponent powodujący błąd, dzięki czemu źródło problemu staje się jasne.

Szybkie sprawdzenie

Jaka jest najczęstsza przyczyna błędu React „Zbyt wiele ponownych renderowań”?

Podsumowanie

Można już naprawiać najczęstsze błędy React: dodawać stabilne klucze do list, bezpiecznie inicjalizować stan, unikać wywoływania setState podczas renderowania, obsługiwać niezgodności hydratacji oraz odczytywać stos komponentów z nakładki błędów.

Kurs ukończony

Gratulacje! Ukończyli Państwo kurs **React DevTools i debugowanie**. Mogą już Państwo zainstalować DevTools, przeglądać drzewa komponentów i stan, profilować renderowania oraz diagnozować najczęstsze błędy wykonania React.

Często zadawane pytania

Czy lekcja „Debugowanie typowych błędów React” jest bezpłatna?

Tak — pełny tekst „Debugowanie typowych błędów React” 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 „Debugowanie typowych błędów React”?

Diagnozuj ostrzeżenia o brakujących kluczach, błędy niezdefiniowanego stanu i błędy hydracji Ć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 „Debugowanie typowych błędów React”?

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. Instalowanie i otwieranie React DevTools
  2. Inspekcja drzewa komponentów i propsów
  3. Korzystanie z karty Profiler
  4. Debugowanie typowych błędów React
← Powrót do React Academy