
Gestion des différents types d'inputs (text, textarea, select, checkbox, radio)
Apprenez à implémenter des composants contrôlés en React pour tous les types d'inputs de formulaire courants : text, textarea, select, checkbox et radio. Maîtrisez leur gestion d'état.
Adapter le pattern contrôlé à chaque élément de formulaire
Le principe fondamental des composants contrôlés reste le même pour tous les types d'inputs HTML : lier la valeur affichée à l'état React via la prop `value` (ou `checked`) et mettre à jour cet état via la fonction `onChange`. Cependant, les détails d'implémentation varient légèrement en fonction de l'élément spécifique.
Ce sous-chapitre détaille comment appliquer le pattern contrôlé aux éléments de formulaire les plus courants : ``, `
Champs texte (``)
Nous avons déjà vu l'exemple de base pour `input type="text"` dans la section précédente. Il s'agit du cas le plus simple : l'état stocke une chaîne de caractères, la prop `value` reçoit cette chaîne, et `onChange` met à jour l'état avec `event.target.value`.
function TextInputExample() {
const [textValue, setTextValue] = useState('');
const handleChange = (event) => {
setTextValue(event.target.value);
};
return (
);
}Ce même pattern s'applique directement à d'autres types d'input basés sur du texte comme `password`, `email`, `number`, etc. Pour `number`, `event.target.value` sera toujours une chaîne, vous devrez peut-être la convertir explicitement (`parseInt` ou `parseFloat`) si vous souhaitez stocker un nombre dans l'état.
Zone de texte (`
En HTML standard, la valeur d'une `
function TextAreaExample() {
const [textAreaValue, setTextAreaValue] = useState('Contenu initial ici.');
const handleChange = (event) => {
setTextAreaValue(event.target.value);
};
return (
);
}Liste déroulante (`
Pour contrôler une liste déroulante (`
Lorsqu'une nouvelle option est choisie, l'événement `onChange` sur l'élément `
function SelectExample() {
const [selectedValue, setSelectedValue] = useState('pomme'); // Valeur initiale
const handleChange = (event) => {
setSelectedValue(event.target.value);
};
return (
);
}Pour une balise `
Case à cocher (``)
Les cases à cocher et les boutons radio sont légèrement différents car leur état pertinent n'est pas `value` mais s'ils sont cochés ou non. On utilise donc la prop `checked` pour les contrôler, qui attend une valeur booléenne (`true` ou `false`).
Dans la fonction `onChange`, l'état coché/décoché se trouve dans `event.target.checked` (et non `event.target.value`).
function CheckboxExample() {
const [isChecked, setIsChecked] = useState(false);
const handleCheckboxChange = (event) => {
// Utiliser event.target.checked pour obtenir le booléen
setIsChecked(event.target.checked);
};
return (
);
}Boutons radio (``)
Les boutons radio sont généralement utilisés en groupe, où un seul choix est possible. Pour les contrôler, vous aurez besoin d'une seule variable d'état pour stocker la *valeur* du bouton radio actuellement sélectionné. Chaque bouton radio du groupe partagera le même gestionnaire `onChange`, mais aura une `value` distincte.
La prop `checked` de chaque bouton radio sera déterminée en comparant la `value` de ce bouton radio spécifique avec la valeur stockée dans l'état.
function RadioExample() {
const [selectedOption, setSelectedOption] = useState('option1'); // Stocke la valeur de l'option choisie
const handleRadioChange = (event) => {
// Met à jour l'état avec la 'value' du radio qui a changé
setSelectedOption(event.target.value);
};
return (
);
}En maîtrisant ces patterns pour chaque type d'input, vous pouvez construire des formulaires contrôlés complexes et gérer finement leur état et leur comportement dans vos applications React.