Gestion des formulaires
Problématique
La gestion des formulaires est l'un des points délicats dans le développement React. La question tourne autour de la notion de "source of truth", c'est-à-dire où sont stockées les données de référence :
-
"composants contrôlés" : la valeur de référence est dans une variable d'état. Le composant ne peut changer de valeur que si la variable change de valeur. C'est le cas recommandé.
-
"composants non-contrôlés" : la valeur de référence est dans le champ de formulaire. Pour y accéder, React doit la lire depuis le DOM.
Dans les deux cas, cela demande un surcroit de travail par rapport au développement web classique.
React-hook-form
Le module react-hook-form prend en charge la plus grande partie de ce travail.
Un exemple simple d'utilisation figure ci-dessous :
import { useForm } from "react-hook-form";
export function App () {
const { register, handleSubmit } = useForm();
// Fonction qui enregistre les données dans la base
const saveUserData = (data) => {
// ...
}
return <form onSubmit={handleSubmit(saveUserData)}>
<input type="text" {...register("prenom")} />
<input type="text" {...register("nom")} />
<button type="submit">Envoyer</button>
</form>;
}
Comme on peut le voir, le module requiert peu d'overhead par rapport à un formulaire HTML pur.
Le hook useForm
renvoie deux fonctions :
* handlesubmit
permet de déclarer la fonction de traitement des données,
* register
permet de déclarer les différents champs à gérer.
Note : il y a beaucoup plus de fonctionnalités, qui peuvent être utilisées pour gérer des cas plus complexes.
Traitement des erreurs et validation
React-hook-form peut gérer lui-même les erreurs simples (par exemple, un champ requis laissé vide), ou bien confier cette tâche à une bibliothèque de validation telle que Yup.
Se reporter à la documentation pour un exemple d'utilisation (ou bien nous demander).