Comment gérer l’état dans vos applications React
La gestion de l’état dans vos applications React n’est pas aussi simple que l’utilisation de useState ou useReducer. Non seulement il existe de nombreux types d’états différents, mais il y a souvent des dizaines de façons de gérer chaque type. Laquelle choisir ? Dans ce guide, nous allons découvrir les différents types d’état dans vos applications React dont vous n’avez peut-être pas conscience, ainsi que la façon de les gérer de la manière la plus efficace. Les quatre types d’états React à gérer Lorsque nous parlons d’état dans nos applications, il est important d’être clair sur les types d’état qui comptent réellement. Il existe quatre principaux types d’état que vous devez gérer correctement dans vos applications React : État local État global État du serveur État de l’URL Nous allons couvrir chacun d’entre eux en détail : État local (UI) – L’état local est constitué de données que nous gérons dans l’un ou l’autre des composants. L’état local est le plus souvent géré dans React à l’aide du hook useState. Par exemple, l’état local serait nécessaire pour afficher ou masquer un composant modal ou pour suivre les valeurs d’un composant de formulaire, comme la soumission du formulaire, lorsque le formulaire est désactivé et les valeurs des entrées d’un formulaire. État global (UI) – L’état global est constitué des données que nous gérons sur plusieurs composants. L’état global est nécessaire lorsque nous voulons obtenir et mettre à jour des données n’importe où dans notre application, ou du moins dans plusieurs composants. Un exemple courant d’état global est l’état de l’utilisateur authentifié. Si un utilisateur est connecté à notre application, il est nécessaire d’obtenir et de modifier ses données dans toute l’application. Parfois, un état que nous pensons devoir être local peut devenir global. État du serveur – Données provenant d’un serveur externe qui doivent être intégrées à l’état de notre interface utilisateur. L’état du serveur est un concept simple, mais il peut être difficile à gérer parallèlement à tous les états locaux et globaux de l’interface utilisateur. Plusieurs éléments d’état doivent être gérés chaque fois que vous récupérez ou mettez à jour des données provenant d’un serveur externe, notamment l’état de chargement et d’erreur. Heureusement, il existe des outils tels que SWR et React Query qui facilitent la gestion de l’état du serveur. État de l’URL – Données qui existent sur nos URL, y compris le nom du chemin et les paramètres de la requête. L’état de l’URL est souvent absent en tant que catégorie d’état, mais c’est une catégorie importante. Dans de nombreux cas, beaucoup de parties importantes de notre application dépendent de l’accès à l’état de l’URL. Essayez d’imaginer la construction d’un blog sans pouvoir récupérer un article à partir de son slug ou de son id qui se trouve dans l’URL ! Il existe sans aucun doute d’autres éléments d’état que nous pourrions identifier, mais ce sont les principales catégories sur lesquelles il convient de se concentrer pour la plupart des applications que vous construisez. Comment gérer l’état local dans React L’état local est peut-être le type d’état le plus facile à gérer dans React, étant donné qu’il existe de nombreux outils intégrés à la bibliothèque React de base pour le gérer. useState est le premier outil que vous devriez utiliser pour gérer l’état de vos composants. Il peut accepter toute valeur de données valide, y compris les valeurs primitives et les valeurs d’objet. De plus, sa fonction setter peut être transmise à d’autres composants en tant que fonction de rappel (sans nécessiter d’optimisations comme useCallback). import { useState } de « react » ; function Layout() { const [isSidebarOpen, setSidebarOpen] = useState(false) ; return ( <> setSidebarOpen(false)} /> {/* … */} ) ; } useReducer est une autre option qui peut être utilisée pour l’état local ou global. Elle est similaire en de nombreux points à useState, mais au lieu d’un état initial, elle accepte un réducteur. L’avantage de useReducer est qu’il fournit un moyen intégré d’effectuer un certain nombre d’opérations d’état différentes avec l’aide de la fonction reducer, ce qui le rend globalement plus dynamique que useState. Vous pouvez voir l’avantage de useReducer par rapport à useState dans cet exemple de suivi des votes. Tout ce que nous avons à faire pour mettre à jour l’état est de passer à la fonction de rappel dispatch une chaîne (qui est ensuite passée au reducer) au lieu du nouvel état lui-même. const initialState = { votes : 0 } ; function reducer(state, action) { switch (action.type) { cas ‘upvote’ : return {votes : state.votes + 1} ; cas ‘downvote’ : retourne {votes : state.votes – 1} ; par défaut : lancer une nouvelle erreur() ; } } function VoteCounter() { const [state, dispatch] = useReducer(reducer, initialState) ; retour ( <> Votes actuels : {Etat.votes} dispatch({type : ‘upvote’})}>Upvote envoi({type : ‘downvote’})}>Downvote ) ; } Comment gérer l’état global dans React Lorsque vous tentez de gérer l’état de plusieurs composants, les choses se compliquent un peu. Vous atteindrez un point dans votre application où des modèles comme « lever l’état vers le haut » et passer des callbacks vers le bas pour mettre à jour votre état à partir des composants conduisent à beaucoup, beaucoup de props. Que faites-vous si vous voulez mettre à jour l’état d’un composant depuis n’importe quel endroit de votre application ? Vous le transformez en état global. Pour le gérer, cependant, vous devez opter pour une solution tierce. De nombreux développeurs ont tendance à utiliser les fonctionnalités intégrées de React, comme l’API Contexte, pour gérer leur état. Soyons clairs : l’API Contexte n’est pas une solution de gestion d’état. Elle permet d’éviter des problèmes comme le forage de props (création d’un tas de props dans des composants qui n’en ont pas besoin), mais elle n’est utile que pour lire l’état, pas pour le mettre à jour. La raison de ne pas utiliser Context pour la gestion globale de l’état réside dans la façon dont il fonctionne. Le comportement par défaut de Context est de rendre à nouveau tous … Lire la suite