Wprowadzenie hooków w React 16.8 zrewolucjonizowało tworzenie komponentów, umożliwiając korzystanie ze stanu i innych funkcji Reacta bez konieczności stosowania klas. Hooki to specjalne funkcje, które umożliwiają „zahaczanie się” o funkcjonalności Reacta z poziomu komponentów funkcyjnych.
Podstawowe zasady hooków
Hooki powinny być wywoływane na najwyższym poziomie komponentu funkcyjnego, a nie w blokach instrukcji, takich jak warunki czy pętle. Dzięki temu zachowują one spójność i przewidywalność działania.
Najważniejsze hooki w React
1. useState
useState
to podstawowy hook, który pozwala komponentom funkcyjnym przechowywać i reagować na zmiany danych. Jest to klucz do zarządzania stanem lokalnym w komponencie.
function Counter() {
const [count, setCount] = useState(0);
return (
<div>
<p>Naciśnięto {count} razy</p>
<button onClick={() => setCount(count + 1)}>Kliknij mnie</button>
</div>
);
}
2. useEffect
useEffect
odpowiada za obsługę efektów ubocznych, takich jak pobieranie danych, subskrypcje czy operacje na DOM. Dzięki tablicy zależności kontrolujemy, kiedy efekt powinien być uruchomiony.
function UserData() {
const [user, setUser] = useState({});
useEffect(() => {
fetch('https://api.example.com/user')
.then(response => response.json())
.then(data => setUser(data));
}, []);
return <div><p>Imię użytkownika: {user.name}</p></div>;
}
3. useContext
useContext
pozwala na łatwe dzielenie danych między komponentami, eliminując potrzebę przekazywania wartości przez całe drzewo komponentów.
const LanguageContext = createContext('angielski');
function App() {
return (
<LanguageContext.Provider value="polski">
<ChildComponent />
</LanguageContext.Provider>
);
}
function ChildComponent() {
const language = useContext(LanguageContext);
return <p>Język: {language}</p>;
}
4. useRef
useRef
umożliwia przechowywanie referencji do elementów DOM oraz mutowalnych wartości, które nie wymagają rerenderowania komponentu przy ich zmianie.
5. useReducer
useReducer
to alternatywa dla useState
, przydatna przy złożonych operacjach na stanie. Umożliwia on zarządzanie stanem poprzez reducer – funkcję przyjmującą aktualny stan i akcję, zwracającą nowy stan.
6. useMemo
useMemo
służy do optymalizacji wydajności przez zapamiętywanie wyników ciężkich obliczeń, co zapobiega ich ponownemu przeprowadzaniu, gdy dane wejściowe się nie zmieniają.
Każdy z tych hooków odgrywa kluczową rolę w zarządzaniu różnymi aspektami komponentów funkcyjnych w React, od stanu po efekty uboczne, kontekst i zaawansowaną logikę stanu. Rozpoczęcie pracy z prostymi przykładami i stopniowe eksplorowanie bardziej złożonych przypadków użycia pomoże skutecznie wykorzystać możliwości hooków w swoich projektach.