Optimisation de la Gestion d'État avec React Context et TypeScript
27 Août 2023
Les contextes jouent un rôle central dans le développement React. Ils permettent de gérer efficacement l'état partagé et les données entre les composants, facilitant la communication transparente entre différentes parties de votre application. Comprendre comment exploiter la puissance des contextes est essentiel pour construire des applications React robustes et faciles à entretenir.
Qu'est-ce que les Contextes ?
Les contextes dans React sont un mécanisme pour transmettre efficacement des données à travers l'arbre des composants sans avoir à passer manuellement des props à chaque niveau. Imaginez-les comme un coffre global pour les données de votre application.
Pour illustrer cela avec un exemple quotidien, imaginez que vous planifiez un voyage en famille. Vos membres de famille représentent différents composants de votre application. Au lieu d'appeler individuellement chaque membre de la famille pour leur fournir les détails du voyage, vous pouvez utiliser un tableau blanc (contexte) dans votre salon où tout le monde peut voir les plans. Maintenant, si vous mettez à jour l'heure de départ sur le tableau blanc, tout le monde est immédiatement informé du changement.
Dans React, c'est similaire à la mise à jour des données dans un contexte, et tout composant qui s'abonne à ce contexte recevra automatiquement les informations mises à jour sans avoir besoin de communication directe entre les composants. Cela simplifie le partage de données et garantit la cohérence dans votre application, tout comme ce tableau blanc pratique pour la planification de votre voyage en famille.
Avantages
Les contextes offrent de nombreux avantages dans le développement React, ce qui en fait un outil indispensable pour la création d'applications évolutives et faciles à entretenir. Parmi les principaux avantages, citons :
- Partage de données simplifié : Les contextes éliminent la nécessité de percer les props, facilitant le partage de données entre les composants à différents niveaux de l'arborescence des composants.
- Code plus propre : Ils encouragent un code modulaire et propre en séparant les préoccupations de données des préoccupations de présentation, ce qui se traduit par des bases de code plus faciles à entretenir et à comprendre.
- Gestion de l'état global : Les contextes excellent dans la gestion de l'état global, garantissant que les données essentielles de l'application restent cohérentes et accessibles dans toute votre application.
- Amélioration des performances : En mettant à jour intelligemment uniquement les composants qui dépendent des données modifiées, les contextes contribuent à optimiser les performances en réduisant les rendus inutiles.
- Lisibilité du code : L'utilisation de contextes pour la gestion de l'état améliore la lisibilité du code, facilitant la compréhension de la structure et du flux de votre application.
Intégrer des contextes dans vos projets React vous permet de créer des applications plus efficaces, faciles à entretenir et évolutives, ce qui se traduit finalement par une meilleure expérience de développement et une plus grande satisfaction des utilisateurs.
Cas pratique
Le défi
Imaginez que nous construisions une application météo qui affiche les conditions météorologiques actuelles pour différentes villes. Les données météorologiques de chaque ville comprennent son nom, sa température et sa description météorologique. Voici la structure de notre application :
Maintenant, si nous voulons récupérer des données dans SearchBar.tsx
et les afficher dans CurrentWeather.container.tsx
et WeekWeather.container.tsx
sans utiliser de contexte, nous devons créer un état en haut de notre App.tsx
:
Comme nous pouvons le voir, nous devons partager l'état (state) et la fonction setState pour nous assurer que les autres composants frères (sister components) disposent des données. Malheureusement, cette solution n'est pas maintenable. Les props sont dispersées partout, et les données ne sont pas vraiment centralisées.
Solution
Afin d'obtenir un code plus propre, nous allons créer un contexte ! Le but est de stocker les données de manière à ce qu'elles puissent être accessibles par tous les composants.
Structure : Créez un dossier src/contexts/ et créez 3 fichiers dans le dossier des contextes comme ceci :
Explications
- Actions de la météo : la liste de nos actions à l'exception de GET : setWeather, setFavoriteTown, et plus encore...
- Fournisseur de météo : Cela entourera la partie de votre application qui nécessite un accès aux données. Il gère également l'état lui-même.
- Réducteur météo : Il gère les différentes actions, donc si vous souhaitez modifier ou ajouter des données, c'est à lui de le faire.
Création de tous les fichiers :
Actions
Bon à savoir :
setWeather
est l'action que nous devons appeler si nous voulons ajouter les données à notre contexte.- Nous exportons le type pour typer notre réducteur.
Reducer
À noter :
- Il y a beaucoup de types, mais les éléments importants sont
initialState
etweatherReducer
. initialState
: Comme son nom l'indique, c'est l'état initial de notre contexte. Nous y plaçons simplement un objet météo avec nos données.weatherReducer
: C'est un commutateur / cas simple en fonction du type d'action.
Provider
À noter :
weathercontext
: Variable non importante, elle sert uniquement à créer leWeatherProvider
.useWeatherContext
: C'est un alias, un raccourci pour appeler notre 'useContext'.WeatherProvider
: Notre état, nous devons entourer la partie de notre application qui a besoin de données pour limiter l'accès et améliorer les performances.
Utilisons notre context!
Notre nouveau App.tsx:
Nous avons supprimé toutes les props et entouré la partie relative à la météo avec WeatherProvider pour partager les données.
Pour ajouter de la donneée :
Dans ce fichier, nous utilisons dispatch depuis useWeatherContext. Dispatch est une fonction qui vous permet d'utiliser l'une de nos actions définies. Ici, nous prenons le dispatch et le renommons en dispatchWeather. Le fait de renommer le dispatch facilite le débogage lorsque nous avons de nombreux contextes et dispatches.
Pour utiliser la donneée :
Et voilà ! Nous avons créé et utilisé notre propre contexte propre ! Félicitations.
Aller plus loin
Une fois que vous aurez compris les bases des contextes React, vous pourrez pousser le développement de votre application au niveau supérieur en explorant des sujets avancés :
-
LocalStorage avec des contextes : Associez la puissance des contextes avec LocalStorage pour persister l'état de l'application. Cela est particulièrement utile pour conserver les préférences de l'utilisateur, telles que les choix de thème, les paramètres de l'utilisateur ou même le dernier état du panier d'achat d'un utilisateur. En liant les contextes avec LocalStorage, vous vous assurez que les données spécifiques à l'utilisateur sont conservées entre les sessions. Cela améliore l'expérience de l'utilisateur en offrant une continuité et une personnalisation.
-
Intégration avec Redux : Bien que les contextes React soient excellents pour gérer l'état local des composants, Redux est une bibliothèque de gestion de l'état robuste qui excelle dans la gestion de l'état global de toute votre application. Vous pouvez tirer parti des deux en utilisant Redux pour l'état global de l'application et les contextes pour la gestion de l'état au niveau des composants spécifiques. Cette approche hybride offre le meilleur des deux mondes, vous permettant de gérer et de partager efficacement des données entre les composants tout en conservant un magasin d'état global pour des données au niveau de l'application complexes.
-
Tests et débogage : Explorez les outils et les techniques pour tester et déboguer les applications qui utilisent des contextes. Des bibliothèques telles que React Testing Library et Redux DevTools peuvent être incroyablement précieuses pour garantir la fiabilité et les performances de votre code.
Conclusion
En résumé, les contextes React sont cruciaux pour le partage efficace de données dans vos applications. Ils simplifient le code, gèrent efficacement l'état global et améliorent les performances. Dans un exemple pratique, nous avons vu comment l'utilisation des contextes peut nettoyer considérablement votre code. En maîtrisant les contextes, vous construirez des applications plus efficaces et plus faciles à entretenir sans perdre l'intérêt de vos lecteurs.
Si vous avez apprécié ce tutoriel, envisagez de me suivre pour plus de contenus utiles. Votre soutien est grandement apprécié ! Merci !