Retour • 11/12/2024
Comment utiliser useState en React ? Le guide complet
Écris par Melvyn Malherbe le 11/12/2024
useState
est le hook le plus utilisé en React. Il permet de stocker des données qui, quand elles sont modifiées, vont provoquer un nouveau rendu de ton composant. Dans ce guide, je vais t'expliquer en détail comment il fonctionne.
La syntaxe de useState
useState
retourne un tableau avec deux éléments :
const Component = () => {
const [count, setCount] = useState(0);
// ^ ^ ^
// | | |
// getter setter valeur initiale
return <div>{count}</div>;
};
- Le getter (
count
) : C'est la valeur actuelle du state - Le setter (
setCount
) : C'est la fonction qui permet de modifier le state - La valeur initiale (
0
) : C'est la valeur par défaut du state
Voici un exemple simple avec un compteur :
Le state provoque un render
Quand tu modifies un state avec le setter, React va re-rendre ton composant. Un render, c'est quoi exactement ?
- React exécute ton composant
- Il compare le nouveau JSX avec l'ancien
- Il met à jour le DOM si nécessaire
Le DOM n'est mis à jour que si le JSX a changé. React est très optimisé pour ça !
Voici un exemple qui montre bien le render :
Tu peux voir que :
- Quand tu cliques sur "Increment", le composant est re-rendu car la valeur change
- Quand tu cliques sur "Same Value", le composant n'est pas re-rendu car la valeur est la même
Le state est modifié après le render
C'est très important de comprendre que le state n'est pas modifié immédiatement. React attend la fin du render pour mettre à jour le state.
Regarde cet exemple :
Le compteur n'augmente que de 1 alors qu'on appelle setCount
trois fois ! C'est parce que count
garde la même valeur jusqu'au prochain render.
Pour résoudre ce problème, on peut utiliser la callback syntax du setter.
La callback syntax pour résoudre ce problème
Le setter de useState peut prendre une fonction en paramètre. Cette fonction reçoit la valeur actuelle du state et doit retourner la nouvelle valeur :
const Component = () => {
const [count, setCount] = useState(0);
const increment = () => {
// ❌ Utilise toujours la même valeur de count
setCount(count + 1);
// ✅ Utilise la valeur la plus récente
setCount((previousCount) => previousCount + 1);
};
return <button onClick={increment}>Increment</button>;
};
Voici l'exemple précédent corrigé avec la callback syntax :
Maintenant le compteur augmente bien de 3 ! La callback reçoit toujours la dernière valeur du state, même si celui-ci n'a pas encore été mis à jour dans le composant.
Cette syntaxe est particulièrement utile quand :
- Tu as besoin de la valeur précédente pour calculer la nouvelle
- Tu fais plusieurs setState à la suite
- Tu as une closure qui capture une ancienne valeur du state
Conclusion
Tu as maintenant une compréhension complète de comment fonctionne useState
:
- Sa syntaxe avec getter et setter
- Comment il provoque des renders
- Pourquoi le state est modifié après le render
- Comment utiliser la callback syntax pour des mises à jour consécutives
Tu peux retrouver ma vidéo YouTube sur le sujet :
Si tu veux approfondir tes connaissances React, je te conseille de lire :
Le meilleur moyen d'apprendre React !
Rejoins par développeurs, cette formation reçoit une note de 4.7 / 5 🚀
Reçois 12 leçons premium pour maîtriser React et faire partie des meilleurs