Użycie useReducer
useReducer
i useState
pełnią bardzo podobne role: Służą do ustawiania stanu komponentu. Robią to jednak w inny sposób. Przypominam: useState
przyjmuje stan początkowy, a zwraca aktualny stan i funkcję do ustawiania stanu:
const [count, setCount] = useState(0);
Więcej o tym doczytasz w artykule:
Dla odmiany, useReducer
jako argument przyjmuje reducer i stan początkowy, a zwraca stan oraz funkcję dispatch
:
const [count, dispatch] = useReducer(countReducer, 0);
Jeśli znasz Reduksa, to na pewno od razu kojarzysz ten koncept!
Napiszmy reducer
Kontynuujmy przykład z prostym licznikiem. Tak, wiem, banały, ale od czegoś trzeba zacząć 🙄
function countReducer(state, action) {
switch (action.type) {
case 'increment':
return state + 1;
case 'decrement':
return state - 1;
}
}
function App() {
const [count, dispatch] = React.useReducer(countReducer, 0);
return (
<div>
{counter}
<button onClick={() => dispatch({ type: 'increment' })}>+</button>
<button onClick={() => dispatch({ type: 'decrement' })}>-</button>
</div>
);
}
Po kliknięciu w przyciski wysyłane są akcje: increment
i decrement
. Są one obsługiwane przez countReducer
, który odpowiednio zwiększa lub zmniejsza licznik o 1.
Pytania?
zapisz się na szkolenie z React. Jeśli chcesz na bieżąco śledzić kolejne części kursu React.js to koniecznie polub mnie na Facebooku i zapisz się na newsletter.
Podsumowanie
useReducer
jest dobrym zamiennikiem useState
w sytuacjach, gdy potrzebujemy wymodelować bardziej rozbudowane komponenty i ich stany. Możliwość łatwego wydzielenia reducera oraz testowania go jednostkowo to wisienka na torcie. useReducer
na pewno się przyda!