OUJOOD.COM
Introduction
Le Hook `useState` est utilisé pour ajouter une gestion d'état locale à un composant fonctionnel React. Avant les Hooks, seuls les composants basés sur des classes pouvaient gérer l'état via `this.state`. Avec `useState`, vous pouvez désormais gérer l'état directement dans vos composants fonctionnels.
Dans ce chapitre, nous allons explorer :
- Comment importer et utiliser `useState`.
- Des exemples pratiques pour illustrer son fonctionnement.
Comment Utiliser useState ?
Voici un exemple corrigé où nous utilisons `useState` pour gérer un champ de saisie interactif. Notez que nous devons importer `ReactDOM` pour rendre notre composant dans le DOM.
import React, { useState } from 'react'; import ReactDOM from 'react-dom'; // Importation de ReactDOM pour le rendu function SaisieTexte() { const [texte, setTexte] = useState(''); // Initialisation de l'état "texte" avec une chaîne vide function handleChange(event) { setTexte(event.target.value); // Met à jour l'état "texte" avec la nouvelle valeur saisie } return ( <div className="conteneur"> {/* Champ de saisie lié à l'état "texte" */} <input type="text" value={texte} onChange={handleChange} placeholder="Entrez du texte..." className="champ-saisie" /> {/* Affichage dynamique du texte saisi */} <p className="texte-affiche">Vous avez écrit : {texte}</p> </div> ); } // Rendu du composant dans le DOM ReactDOM.render(<SaisieTexte />, document.getElementById('root'));
Explication détaillée ligne par ligne :
-
import React, { useState } from 'react';
:- Nous importons React ainsi que le Hook `useState` depuis la bibliothèque React.
- `useState` permet de gérer l'état local dans un composant fonctionnel.
-
import ReactDOM from 'react-dom';
:- Cette ligne importe la bibliothèque `ReactDOM`, qui est utilisée pour intégrer notre composant React dans le DOM réel.
- `ReactDOM.render()` est une méthode essentielle qui insère notre composant dans un élément HTML spécifique (par exemple, celui ayant l'id `root`).
-
const [texte, setTexte] = useState('');
:- Cette ligne initialise une variable d'état appelée `texte` avec une chaîne vide comme valeur initiale.
setTexte
est une fonction qui permet de mettre à jour cette variable d'état.
-
function handleChange(event) { ... }
:- Cette fonction est appelée chaque fois que l'utilisateur modifie le contenu du champ de saisie.
event.target.value
récupère la valeur actuelle saisie par l'utilisateur.
-
<input type="text" value={texte} onChange={handleChange} />
:- Ce champ de saisie est lié à l'état `texte` via
value={texte}
. - Lorsque l'utilisateur saisit du texte, l'événement
onChange
appelle la fonction `handleChange`, qui met à jour l'état `texte`.
- Ce champ de saisie est lié à l'état `texte` via
-
<p>Vous avez écrit : {texte}</p>
:- Cet élément affiche dynamiquement le texte saisi par l'utilisateur grâce à l'état `texte`.
-
ReactDOM.render(<SaisieTexte />, document.getElementById('root'));
:- Cette ligne utilise la méthode
ReactDOM.render()
pour insérer le composantSaisieTexte
dans l'élément HTML ayant l'idroot
. document.getElementById('root')
spécifie l'élément cible dans le DOM.
- Cette ligne utilise la méthode
Amélioration Possible pour React 18 : Utilisation de createRoot
Avec l'arrivée de React 18, la méthode classique ReactDOM.render()
a été remplacée par une nouvelle approche basée sur createRoot
. Cette amélioration permet de tirer parti des nouvelles fonctionnalités de React 18, telles que le concurrent rendering, tout en rendant le code plus moderne et aligné avec les meilleures pratiques actuelles.
Pourquoi Utiliser createRoot
?
Bien que ReactDOM.render()
fonctionne toujours dans React 18, son utilisation est déconseillée pour les nouveaux projets car elle n'exploite pas pleinement les capacités du concurrent mode. Voici quelques avantages de createRoot
:
- Concurrent Rendering : Permet à React de mieux gérer les mises à jour asynchrones et de prioriser les tâches critiques pour un rendu plus fluide.
- API Plus Moderne :
createRoot
est conçu pour être utilisé avec React 18 et offre une meilleure compatibilité avec les futures versions. - Performances Optimisées : Exploite les nouvelles optimisations introduites dans React 18 pour minimiser les re-renders inutiles.
Exemple avec createRoot
Voici comment notre exemple précédent peut être mis à jour pour utiliser createRoot
au lieu de ReactDOM.render()
:
import React, { useState } from "react"; function SaisieTexte() { const [texte, setTexte] = useState(""); function handleChange(event) { setTexte(event.target.value); } return ( <div style={{ textAlign: "center", marginTop: "20px" }}> <input type="text" value={texte} onChange={handleChange} placeholder="Entrez du texte..." style={{ padding: "8px", fontSize: "16px", borderRadius: "5px", border: "1px solid #ccc", outline: "none", }} /> <p style={{ marginTop: "10px", fontSize: "18px", fontWeight: "bold" }}> Vous avez écrit : <span style={{ color: "blue" }}>{texte}</span> </p> </div> ); } export default SaisieTexte; // 🔹 Exportation du composant
Explication détaillée d'un composant React avec useState
1️⃣ Importation des modules React et useState
import React, { useState } from "react";
Cette ligne importe la bibliothèque React et le hook useState
pour gérer l'état local.
2️⃣ Définition du composant SaisieTexte
function SaisieTexte() {
Déclaration du composant fonctionnel SaisieTexte
.
3️⃣ Déclaration de l’état local avec useState
const [texte, setTexte] = useState("");
Création d'un état texte
initialisé à une chaîne vide. setTexte
est utilisé pour mettre à jour texte
.
4️⃣ Définition de la fonction handleChange
function handleChange(event) {
setTexte(event.target.value);
}
Cette fonction est déclenchée lors d'une saisie utilisateur dans l’input. Elle met à jour texte
avec la valeur actuelle de l’input.
5️⃣ Rendu du composant
return (
<div style={{ textAlign: "center", marginTop: "20px" }}>
Le composant retourne une <div>
centrée contenant l’input et le texte saisi.
6️⃣ Champ de saisie (<input>
)
<input
type="text"
value={texte}
onChange={handleChange}
placeholder="Entrez du texte..."
/>
L’input est lié à texte
et met à jour l’état avec handleChange
à chaque modification.
7️⃣ Affichage du texte saisi
<p>Vous avez écrit : <span style={{ color: "blue" }}>{texte}</span></p>
Affiche dynamiquement la valeur de texte
en bleu.
8️⃣ Exportation du composant
export default SaisieTexte;
Permet d'utiliser ce composant dans d'autres fichiers React.
📌 Résumé du fonctionnement
- Le composant
SaisieTexte
contient un champ de texte et affiche son contenu en temps réel. useState
gère l’état local.- La fonction
handleChange
met à jour l'état à chaque saisie.
✅ Résultat visuel
Avant de taper :
[ Entrez du texte... ]
Pendant la saisie de "Bonjour" :
[ Bonjour ]
Affichage :
Vous avez écrit : Bonjour
🚀 Conclusion
Ce composant React est un excellent exemple d'interaction en temps réel avec useState
. Il peut être utilisé pour des formulaires, des recherches dynamiques, et bien plus !
Différence entre ReactDOM.render()
et createRoot
Voici les principales différences entre ces deux approches :
Aspect | ReactDOM.render() | createRoot |
---|---|---|
Méthode | Méthode statique directement sur ReactDOM . |
Méthode instanciée via createRoot . |
React Version | Utilisé dans React 17 et versions précédentes. | Recommandé pour React 18 et versions ultérieures. |
Concurrent Rendering | N'est pas compatible avec le concurrent mode. | Fonctionne nativement avec le concurrent mode, offrant des performances optimisées. |
Syntaxe |
ReactDOM.render(<Composant />, document.getElementById('root')); |
const root = createRoot(document.getElementById('root')); root.render(<Composant />); |
Pourquoi Passer à createRoot
?
Si vous travaillez avec React 18 ou une version ultérieure, il est fortement recommandé de passer à createRoot
pour plusieurs raisons :
- Compatibilité Future :
createRoot
est conçu pour être aligné avec les futures évolutions de React. - Performances : Il exploite les optimisations internes de React 18, notamment le concurrent rendering.
- Meilleures Pratiques : Utiliser la méthode recommandée garantit que votre code est moderne et maintenable.
Transition vers React 18
Pour migrer votre projet existant vers React 18 et utiliser createRoot
, suivez ces étapes :
-
Vérifiez votre version de React : Assurez-vous que votre projet utilise React 18 ou une version ultérieure. Vous pouvez vérifier cela dans votre fichier
package.json
ou via la commande suivante dans votre terminal :npm list react
-
Remplacez
ReactDOM.render()
parcreateRoot
: Modifiez simplement votre fichier principal (ex.index.js
) pour utilisercreateRoot
comme illustré dans l'exemple ci-dessus. -
Testez votre application : Lancez votre application avec
npm start
pour vérifier que tout fonctionne correctement avec la nouvelle méthode.
Conclusion
En passant à createRoot
dans React 18, vous bénéficiez d'une API plus moderne et de meilleures performances grâce au concurrent rendering. Cela garantit que votre code reste à jour avec les dernières pratiques recommandées par la communauté React.
Conclusion
Vous avez maintenant appris à utiliser `useState` pour gérer l'état local dans vos composants fonctionnels React. Grâce à cet Hook, vous pouvez rendre vos applications interactives sans avoir besoin de recourir aux composants basés sur des classes.
Prochain chapitre : useEffect