Crochet de useReducer
réaction
Le useReducer
crochet est similaire au useState
crochet.
Il permet une logique d'état personnalisée.
Si vous vous retrouvez à suivre plusieurs éléments d'état qui reposent sur une logique complexe, useReducer
cela peut être utile.
Syntaxe
Le crochet useReducer accepte deux arguments.
useReducer(<réducteur>, <étatinitial>)
La reducer
fonction contient votre logique d'état personnalisée et initialState
peut être une valeur simple mais contiendra généralement un objet.
Le useReducer
crochet renvoie le courant state
et une dispatch
méthode.
Voici un exemple useReducer
dans une application de compteur :
Exemple:
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'));
C'est juste la logique pour garder une trace de l'état de la tâche terminée.
Toute la logique pour ajouter, supprimer et terminer une tâche peut être contenue dans un seul
useReducer
crochet en ajoutant plus d'actions.