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.