Reageerhaak useReducer
_
De useReducer
haak is vergelijkbaar met de useState
haak.
Het maakt aangepaste statuslogica mogelijk.
Als u merkt dat u meerdere staatsdelen bijhoudt die afhankelijk zijn van complexe logica, useReducer
kan dit handig zijn.
Syntaxis
De useReducer Hook accepteert twee argumenten.
useReducer(<reducer>, <initialState>)
De reducer
functie bevat uw aangepaste statuslogica en initialState
kan een eenvoudige waarde zijn, maar zal over het algemeen een object bevatten.
De useReducer
haak retourneert de huidige state
en een dispatch
methode.
Hier is een voorbeeld van useReducer
in een teller-app:
Voorbeeld:
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'));
Dit is slechts de logica om de volledige status van de taak bij te houden.
Alle logica om een taak toe te voegen, te verwijderen en te voltooien, zou in één enkele
useReducer
Hook kunnen worden opgenomen door meer acties toe te voegen.