React est une bibliothèque JavaScript qui nous permet de créer des interfaces utilisateur de manière déclarative. L'un des concepts clés de React est la manière dont nous gérons le cycle de vie des composants. Dans cet article, nous aborderons deux aspects principaux : les méthodes de cycle de vie dans les composants de classe et les Hooks.
Les méthodes de cycle de vie sont des méthodes spéciales appelées à différentes étapes du cycle de vie d'un composant. Voici quelques-unes des méthodes de cycle de vie les plus courantes et leurs objectifs :
constructor(props) { super(props); this.state = { count: 0 }; }
componentDidMount() { this.fetchData(); }
componentDidUpdate(prevProps, prevState) : appelé après les mises à jour du composant. Utile pour répondre aux changements d’accessoires ou d’état. Assurez-vous de vérifier les modifications pour éviter les boucles infinies.
componentDidUpdate(prevProps) { if (this.props.id !== prevProps.id) { this.fetchData(); } }
componentWillUnmount() : appelé juste avant que le composant ne soit supprimé du DOM. Utile pour nettoyer les abonnements, les minuteries ou d'autres opérations nécessitant un nettoyage.
componentWillUnmount() { this.cleanup(); }
componentDidCatch(error, info) : utilisé pour détecter les erreurs dans les composants enfants. Utile pour la gestion centralisée des erreurs.
componentDidCatch(error, info) { logErrorToMyService(error, info); }
React Hooks est une fonctionnalité qui nous permet d'utiliser des méthodes d'état et de cycle de vie sans écrire de composants de classe. Voici quelques-uns des crochets les plus couramment utilisés :
Utilisé pour ajouter un état aux composants fonctionnels. Cette fonction renvoie une paire : l'état actuel et une fonction pour le mettre à jour.
import React, { useState } from 'react'; const Counter = () => { const [count, setCount] = useState(0); return ( <div> <p>Count: {count}</p> <button onClick={() => setCount(count + 1)}>Increment</button> </div> ); };
useEffect nous permet d'exécuter des effets secondaires dans des composants fonctionnels. Il combine les fonctionnalités de composantDidMount, composantDidUpdate et composantWillUnmount.
constructor(props) { super(props); this.state = { count: 0 }; }
componentDidMount() { this.fetchData(); }
componentDidUpdate(prevProps) { if (this.props.id !== prevProps.id) { this.fetchData(); } }
Le hook useContext est utilisé pour accéder au contexte dans les composants fonctionnels. Ceci est particulièrement utile pour partager des données globales, telles que des thèmes ou le statut d'authentification des utilisateurs, sans perçage d'accessoires.
Exemple : Thématisation avec useContext
Dans cet exemple, nous allons créer un contexte de thème simple qui nous permet de basculer entre les thèmes clairs et sombres.
1. Créer le contexte du thème
Tout d'abord, nous créons un contexte pour le thème.
componentWillUnmount() { this.cleanup(); }
2. Consommer le contexte du thème
Ensuite, nous pouvons créer un composant qui consomme le contexte du thème pour appliquer des styles et fournir un bouton pour basculer le thème.
componentDidCatch(error, info) { logErrorToMyService(error, info); }
3. Enveloppez l'application avec le fournisseur de thème
Enfin, nous enveloppons notre application (ou une partie de celle-ci) avec le ThemeProvider pour fournir le contexte du thème à ses enfants.
import React, { useState } from 'react'; const Counter = () => { const [count, setCount] = useState(0); return ( <div> <p>Count: {count}</p> <button onClick={() => setCount(count + 1)}>Increment</button> </div> ); };
Explication
Création de contexte de thème : nous créons un ThemeContext à l'aide de createContext et d'un composant ThemeProvider qui gère l'état actuel du thème et fournit une fonction pour le basculer.
Consommation de contexte : dans le ThemedComponent, nous utilisons useContext(ThemeContext) pour accéder au thème actuel et à la fonction bascule. Ce composant affiche un contenu différent en fonction du thème actuel et comprend un bouton pour l'activer.
Structure de l'application : l'intégralité de l'application (ou une partie de celle-ci) est enveloppée dans le ThemeProvider, permettant à tout composant enfant d'accéder au contexte du thème.
import React, { useState, useEffect } from 'react'; const FetchDataOnce = () => { const [data, setData] = useState([]); useEffect(() => { const fetchData = async () => { const response = await fetch('https://api.example.com/data'); const result = await response.json(); setData(result); }; fetchData(); }, []); // Effect runs only once when the component mounts return ( <ul> {data.map(item => ( <li key={item.id}>{item.name}</li> ))} </ul> ); };
import React, { useState, useEffect } from 'react'; const CountComponent = () => { const [count, setCount] = useState(0); useEffect(() => { console.log(`Count updated: ${count}`); const fetchData = async () => { const response = await fetch(`https://api.example.com/data/${count}`); const result = await response.json(); console.log(result); }; fetchData(); }); // Effect runs every time the component renders return ( <div> <p>Count: {count}</p> <button onClick={() => setCount(count + 1)}>Increment</button> </div> ); };
Les hooks offrent de la flexibilité et la possibilité de partager une logique entre des composants sans avoir à utiliser des composants d'ordre supérieur (HOC) ou des accessoires de rendu. Certains avantages de l’utilisation des Hooks incluent :
Les méthodes de cycle de vie et les Hooks sont deux aspects importants du développement de React. Comprendre le fonctionnement des deux concepts nous permet de créer des composants plus efficaces et plus maintenables. Les hooks, en particulier, ouvrent de nouvelles possibilités pour développer des composants fonctionnels, modifiant ainsi la façon dont nous interagissons avec l'état et les effets secondaires.
En maîtrisant les méthodes de cycle de vie et les Hooks, vous serez en mesure de créer des applications React plus robustes et réactives. Bon codage !
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!