Maison > interface Web > Questions et réponses frontales > Qu'est-ce que l'état dans React? Comment gérez-vous l'état en classe et les composants fonctionnels?

Qu'est-ce que l'état dans React? Comment gérez-vous l'état en classe et les composants fonctionnels?

Emily Anne Brown
Libérer: 2025-03-19 13:35:34
original
111 Les gens l'ont consulté

Qu'est-ce que l'état dans React? Comment gérez-vous l'état en classe et les composants fonctionnels?

L'état de React fait référence aux données ou aux propriétés qui contrôlent le comportement et le rendu des composants. Ceux-ci sont mutables et peuvent changer avec le temps, déclenchant des redevateurs pour mettre à jour l'interface utilisateur. L'état est crucial pour créer des applications Web interactives et dynamiques.

Gérer l'état dans les composants de la classe:

Dans les composants de la classe, l'état est géré à l'aide de l'objet this.state . Vous initialisez l'état dans le constructeur et pouvez le mettre à jour en utilisant this.setState() . Voici un exemple:

 <code class="javascript">class ExampleComponent extends React.Component { constructor(props) { super(props); this.state = { count: 0 }; } incrementCount = () => { this.setState({ count: this.state.count 1 }); }; render() { return ( <div> <p>Count: {this.state.count}</p> <button onclick="{this.incrementCount}">Increment</button> </div> ); } }</code>
Copier après la connexion

Gestion de l'état dans les composants fonctionnels:

Dans les composants fonctionnels, l'état est géré à l'aide du crochet useState introduit dans React 16.8. Le crochet useState vous permet d'ajouter l'état aux composants fonctionnels. Voici comment il est utilisé:

 <code class="javascript">import React, { useState } from 'react'; function ExampleComponent() { const [count, setCount] = useState(0); const incrementCount = () => { setCount(count 1); }; return ( <div> <p>Count: {count}</p> <button onclick="{incrementCount}">Increment</button> </div> ); }</code>
Copier après la connexion

Dans cet exemple, useState renvoie un tableau où le premier élément est la valeur d'état actuelle, et la seconde est une fonction pour la mettre à jour.

Comment pouvez-vous mettre à jour l'état dans React, et quelles sont les différences entre les composants de la classe SetState dans les composants fonctionnels?

MISE À JOUR ATTAT:

  • Composants de classe: vous mettez à jour l'état à l'aide de this.setState() . Il peut prendre un objet ou une fonction comme un argument. Lorsque vous utilisez un objet, React fusionne l'objet avec l'état actuel. L'utilisation d'une fonction garantit que vous travaillez avec l'État le plus récent, ce qui est important pour les mises à jour d'état asynchrones.
  • Composants fonctionnels: vous mettez à jour l'état à l'aide de la fonction renvoyée par useState . Cette fonction prend la nouvelle valeur d'état comme argument et met à jour l'état.

Différences entre SetState et UseState:

  1. Syntaxe et utilisation:

    • setState est une méthode sur l'instance de classe et doit être liée si elle est utilisée dans les gestionnaires d'événements.
    • useState renvoie un tableau que vous pouvez utiliser avec la destruction du tableau, le rendant plus concis et simple.
  2. Nature asynchrone:

    • setState et la fonction renvoyée par useState sont asynchrones. Cependant, setState peut accepter une fonction de rappel à exécuter après la mise à jour de l'état, tandis useState ne fournit pas ce mécanisme intégré. Vous utiliseriez généralement useEffect pour gérer les effets secondaires après un changement d'état dans les composants fonctionnels.
  3. État de fusion:

    • setState fusionne le nouvel état avec l'état existant, qui est utile pour mettre à jour des objets ou des tableaux imbriqués.
    • La fonction useState Setter remplace toute la valeur de l'état. Vous devez fusionner manuellement l'état dans les composants fonctionnels, en utilisant souvent le formulaire de mise à jour de fonction comme setCount(prevCount => prevCount 1) .

Quelles sont les meilleures pratiques pour gérer l'état complexe dans les applications REACT, et comment les méthodes de cycle de vie dans les composants de classe se comparent-elles à l'utilisation d'effet dans les composants fonctionnels?

Meilleures pratiques pour gérer un état complexe:

  1. Soulevez l'état: déplacez l'état vers l'ancêtre commun le plus proche des composants qui doivent l'utiliser. Cela aide à gérer l'État de manière centralisée et à la transmettre via des accessoires.
  2. Utilisez l'API de contexte: pour les composants profondément imbriqués, utilisez l'API de contexte pour éviter le forage des accessoires et rendre l'état plus accessible dans tout l'arborescence des composants.
  3. Bibliothèques de gestion de l'État: Pour des applications très complexes, envisagez d'utiliser des bibliothèques de gestion d'État comme Redux ou MOBX pour gérer l'état mondial.
  4. Mises à jour immuables: Traitez toujours l'état comme immuable et utilisez des méthodes comme .map() , .filter() et l'opérateur de diffusion pour créer de nouveaux objets d'état.
  5. Préoccupations séparées: décomposer les grands composants en plus petits et plus gérables pour garder la logique de l'État claire et réutilisable.

Méthodes de cycle de vie par rapport à l'utilisation d'effet:

  • Méthodes de cycle de vie dans les composants de la classe: ceux-ci incluent componentDidMount , componentDidUpdate et componentWillUnmount . Ils sont utilisés pour gérer les effets secondaires tels que la récupération des données, la configuration des abonnements et les nettoyer.
  • Utilisation Effecte dans les composants fonctionnels: useEffect est l'équivalent à toutes les méthodes de cycle de vie dans les composants fonctionnels. Il peut fonctionner après chaque rendu, après le premier rendu, ou lorsque des dépendances spécifiques changent. Vous pouvez retourner une fonction de nettoyage pour gérer les composants avec un comportement de type de type.

Exemple d'utilisation d'effet:

 <code class="javascript">import React, { useState, useEffect } from 'react'; function ExampleComponent() { const [count, setCount] = useState(0); useEffect(() => { document.title = `Count: ${count}`; // Cleanup function return () => { document.title = 'React App'; }; }, [count]); return ( <div> <p>Count: {count}</p> <button onclick="{()"> setCount(count 1)}>Increment</button> </div> ); }</code>
Copier après la connexion

Comment la gestion de l'état de React affecte-t-elle la rediffusion des composants et quelles techniques peuvent être utilisées pour optimiser les performances dans les composants de classe et fonctionnels?

Effet de la gestion de l'État sur la rediffusion:

  • Modifications d'état: chaque fois que l'État change dans un composant, React renvoiera ce composant et ses enfants. Cela garantit que l'interface utilisateur reste synchronisée avec les données de l'application.
  • Si vous pouvez utiliser la finition de la classe : vous pouvez utiliser shouldComponentUpdate pour éviter les redevateurs inutiles en renvoyant false si les nouveaux accessoires ou l'état ne provoquent pas de changement visuel. Dans les composants fonctionnels, React.memo sert un objectif similaire, empêchant les redevances si les accessoires n'ont pas changé.

Techniques d'optimisation:

  1. Composants purs: utilisez React.PureComponent pour les composants de classe. Il met en œuvre shouldComponentUpdate avec un accessoire peu profond et une comparaison d'état.
  2. React.memo: enveloppez les composants fonctionnels avec React.memo pour éviter les redevateurs inutiles si les accessoires sont les mêmes.
  3. UseCallback et UseMemo: Dans les composants fonctionnels, utilisez useCallback pour mémoriser les fonctions de rappel et useMemo pour mémoriser des valeurs calculées, empêchant des re-ordinateurs inutiles.
  4. Prop-clé: lors des listes de rendu, utilisez l'hélice key pour aider à réagir d'identifier quels éléments ont changé, ont été ajoutés ou ont été supprimés.
  5. Fissure de code et chargement paresseux: utilisez React.lazy et Suspense pour charger les composants uniquement lorsqu'ils sont nécessaires, réduisant la taille initiale du bundle et améliorant les temps de chargement.
  6. Virtualisation: pour rendre les grandes listes, utilisez des bibliothèques de virtualisation comme react-window ou react-virtualized pour ne rendre que les éléments visibles.

Exemple d'optimisation avec mémo et usecallback:

 <code class="javascript">import React, { useState, useCallback } from 'react'; const ChildComponent = React.memo(function ChildComponent({ onClick }) { console.log('ChildComponent rendered'); return <button onclick="{onClick}">Click me</button>; }); function ParentComponent() { const [count, setCount] = useState(0); const handleClick = useCallback(() => { setCount(count 1); }, [count]); return ( <div> <p>Count: {count}</p> <childcomponent onclick="{handleClick}"></childcomponent> </div> ); }</code>
Copier après la connexion

Dans cet exemple, ChildComponent ne renforcera que si onClick change, grâce à React.memo et useCallback .

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!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal