Stan to dane, które komponent “pamięta” między renderami. useState to najprostszy sposób na stan lokalny — idealne dla pojedynczych wartości. useReducer to wzorzec dla złożonego stanu z wieloma powiązanymi akcjami — jak mini-Redux w komponencie.
Diagram przepływu: Zdarzenie użytkownika → dispatch(action) → reducer(state, action) → nowy state → re-render. Porównaj obok z useState: Zdarzenie → setState → nowy state → re-render.
Przykład kodu JSX
Ten sam licznik zaimplementowany najpierw z useState, potem z useReducer. Pokaż kiedy useReducer jest czytelniejszy (koszyk zakupów z add/remove/clear).
Zapytaj klasę: “Co by się stało, gdyby kliknięcie przycisku nie zapamiętało ile razy kliknęliście?” — to motywuje po co jest stan.
Wizualizacja re-renderu
Na slajdzie narysujcie dwa stany komponentu obok siebie — przed i po setState. Podświetlcie co się zmieniło w JSX.
Analogia do useReducer
useReducer to jak automat vendingowy: wrzucasz monetę (dispatch akcji), automat wykonuje logikę (reducer) i wydaje produkt (nowy stan). Nie dotykasz wewnętrznych kółek!
Typowe pytanie na Q&A
“Czy setState jest synchroniczny?” — Nie! React batches aktualizacje stanu. Nowy stan jest dostępny dopiero po re-renderze.
Bez stanu aplikacja byłaby statyczną stroną. Zrozumienie useState i useReducer to klucz do tworzenia interaktywnych interfejsów. Ten temat bezpośrednio przyda się w projekcie semestralnym!