Reaguj useReducer
hak
Hook jest useReducer
podobny do useState
Hooka.
Pozwala na niestandardową logikę stanu.
Jeśli zauważysz, że śledzisz wiele elementów stanu, które opierają się na złożonej logice, useReducer
może być przydatne.
Składnia
Hook useReducer akceptuje dwa argumenty.
useReducer(<reduktor>, <stan początkowy>)
Funkcja reducer
zawiera twoją niestandardową logikę stanu i initialState
może być prostą wartością, ale zazwyczaj zawiera obiekt.
useReducer
Hook zwraca bieżący i state
metodę dispatch
.
Oto przykład useReducer
aplikacji licznikowej:
Przykład:
import { useReducer } from "react";
import ReactDOM from "react-dom";
const initialTodos = [
{
id: 1,
title: "Todo 1",
complete: false,
},
{
id: 2,
title: "Todo 2",
complete: false,
},
];
const reducer = (state, action) => {
switch (action.type) {
case "COMPLETE":
return state.map((todo) => {
if (todo.id === action.id) {
return { ...todo, complete: !todo.complete };
} else {
return todo;
}
});
default:
return state;
}
};
function Todos() {
const [todos, dispatch] = useReducer(reducer, initialTodos);
const handleComplete = (todo) => {
dispatch({ type: "COMPLETE", id: todo.id });
};
return (
<>
{todos.map((todo) => (
<div key={todo.id}>
<label>
<input
type="checkbox"
checked={todo.complete}
onChange={() => handleComplete(todo)}
/>
{todo.title}
</label>
</div>
))}
</>
);
}
ReactDOM.render(<Todos />, document.getElementById('root'));
To tylko logika śledzenia stanu ukończenia zadań do wykonania.
Cała logika związana z dodawaniem, usuwaniem i ukończeniem zadania może być zawarta w jednym
useReducer
hooku poprzez dodanie większej liczby akcji.