recherche
Maisoninterface Webtutoriel CSSLe cercle d'un cycle de vie React

Le cercle d'un cycle de vie React

Les composants React passent par différentes étapes du cycle de vie de leur application, bien que ce qui se passe dans les coulisses puisse ne pas être évident.

Ces étapes comprennent:

  • Monter
  • renouveler
  • désinstaller
  • Gestion des erreurs

Chaque étape a une méthode correspondante à laquelle des actions spécifiques peuvent être effectuées sur des composants. Par exemple, lors de la récupération des données du réseau, vous voudrez peut-être appeler une fonction qui gère les appels d'API dans componentDidMount() (disponible dans la phase de montage).

Comprendre différentes approches de cycle de vie est crucial pour le développement d'applications REACT, car elle nous permet de déclencher des opérations avec précision en cas de besoin sans être confondu avec d'autres opérations. Cet article couvrira chaque cycle de vie, y compris les méthodes disponibles et les types de scénarios que nous les utilisons.

Phase de montage

Considérez les montures comme le stade initial du cycle de vie des composants. Le composant n'existait pas avant que le support ne se produise - il a simplement traversé le DOM jusqu'à ce que le montage se produise et le connecte dans le cadre du document.

Une fois le composant monté, nous pouvons profiter de nombreuses méthodes: constructor() , render() , componentDidMount() et static getDerivedStateFromProps() . Chaque méthode a son propre objectif, jetons un coup d'œil dans l'ordre.

constructeur()

constructor() est requise lors de la définition des états directement sur le composant pour lier les méthodes ensemble. Cela ressemble à ceci:

 // Une fois que le composant d'entrée commence à monter ...
constructeur (accessoires) {
  // ... définir des accessoires ...
  super (accessoires);
  // ... Dans ce cas, c'est un nom d'utilisateur vide ...
  this.state = {
    nom d'utilisateur: ''
  };
  // ... puis lier une méthode qui gère l'entrée change ce.handleInputchange = this.handleInputchange.bind (this);
}

Il est important de savoir que constructor est la première méthode appelée lors de la création d'un composant. Le composant n'a pas été rendu (à venir bientôt), mais le DOM le sait déjà et nous pouvons le s'accrocher avant qu'il ne soit rendu. Ce n'est donc pas là que nous appelons setState() ou introduisons des effets secondaires, car le composant est toujours en phase de construction!

J'ai écrit un tutoriel sur Refs avant et une chose que j'ai remarquée, c'est que lorsque vous utilisez React.createRef() , vous pouvez définir Ref dans constructor . Ceci est raisonnable, car Refs est utilisé pour modifier les valeurs sans accessoires ou doit renvoyer le composant avec des valeurs mises à jour:

 constructeur (accessoires) {
  super (accessoires);
  this.state = {
    nom d'utilisateur: ''
  };
  this.inputText = react.crearef ();
}

rendre()

render() est l'endroit où la marque du composant s'affiche sur l'extrémité avant. L'utilisateur peut y voir et y accéder pour le moment. Si vous avez déjà créé un composant React, vous le connaissez déjà - même si vous ne le réalisez pas - car il nécessite des balises de sortie.

 L'application de classe étend React.
  // Pendant le processus de montage, veuillez rendre le contenu suivant!
  rendre() {
    Retour (
      <div>
        <p>Bonjour le monde!</p>
      </div>
    )
  }
}

Mais ce n'est pas tout le but de render() ! Il peut également être utilisé pour rendre les tableaux de composants:

 L'application de classe étend React.
  rendre () {
    Retour [
      <h2 id="Outils-JavaScript">Outils JavaScript</h2> ,
      <frontend></frontend>,
      <backend></backend>
    ]]
  }
}

Même des fragments de composants:

 L'application de classe étend React.
  rendre() {
    Retour (
      <react.fragment><p>Bonjour le monde!</p></react.fragment>
    )
  }
}

Nous pouvons également l'utiliser pour rendre des composants en dehors de la hiérarchie DOM (similaire au portail React):

 // Nous créons un portail qui permet aux composants de déplacer le portail de classe étend React.
  // Tout d'abord, nous créons un constructeur d'élément div () {
    super();
    this.el = document.CreateElement ("div");
  }

  // Après le mont, ajoutons l'élément enfant du composant composantdidmount = () => {
    Portalroot.ApendChild (this.el);
  };

  // Si le composant est supprimé du DOM, alors nous supprimons également son composant des éléments enfantswillunmount = () => {
    Portalroot.removechild (this.el);
  };

  // Ah, maintenant nous pouvons rendre le composant et ses éléments enfants rendent () selon les besoins {
    const {enfants} = this.props;
    Retour Reactdom.CreatePortal (enfants, this.el);
  }
}

Bien sûr, render() peut rendre des nombres et des chaînes ...

 L'application de classe étend React.
  rendre () {
    Retour "Hello World!"
  }
}

Et valeurs nuls ou booléennes:

 L'application de classe étend React.
  rendre () {
    retourner null
  }
}

ComponentDidMount ()

Le nom componentDidMount() indique-t-il sa signification? Cette méthode est appelée une fois le composant monté (c'est-à-dire connecté au DOM). Dans un autre tutoriel, j'ai écrit sur l'obtention de données dans React, c'est là que vous souhaitez faire une demande à l'API pour obtenir des données.

Nous pouvons utiliser votre méthode de récupération:

 fetchusers () {
  Fetch (`https: // jsonplaceholder.typicode.com / utilisateur`)
    .Then (Response => Response.json ())
    .Then (data =>
      this.setstate ({
        utilisateurs: données,
        Isloading: False,
      })
    )
  .Catch (error => this.setState ({error, isLoading: false}));
}

Ensuite, appelez la méthode dans componentDidMount() Hook:

 composantdidmount () {
  this.fetchusers ();
}

Nous pouvons également ajouter des auditeurs d'événements:

 composantdidmount () {
  el.addeventListener ()
}

Très concis, non?

statique GetderivedStateFromprops ()

C'est un peu de nom verbeux, mais static getDerivedStateFromProps() n'est pas aussi compliqué qu'il y paraît. Il est appelé avant render() de la phase de montage et avant la phase de mise à jour. Il renvoie un objet pour mettre à jour l'état du composant, ou null s'il n'y a pas de contenu à mettre à jour.

Pour comprendre comment cela fonctionne, implémentons un composant de compteur qui définira une valeur spécifique pour son état de compteur. Ce statut ne sera mis à jour que lorsque la valeur de maxCount est plus élevée. maxCount sera passé du composant parent.

Ceci est le composant parent:

 L'application de classe étend React.
  constructeur (accessoires) {
    Super (accessoires)

    this.textInput = react.crearef ();
    this.state = {
      Valeur: 0
    }
  }

  handleIncrement = e => {
    E.PreventDefault ();
    this.setState ({valeur: this.state.value 1})
  };

  mandegredecment = e => {
    E.PreventDefault ();
    this.setState ({valeur: this.state.value - 1})
  };

  rendre() {
    Retour (
      <react.fragment><p>MAX COUNT: {this.state.value}</p>
           
          -
        <counter maxcount="{this.state.value}"></counter></react.fragment>
    )
  }
}

Nous avons un bouton pour augmenter la valeur de maxCount , que nous passons au composant Counter .

 Class Counter étend React.
  état = {
    Comptoir: 5
  }

  statique GetderivedStateFrombProps (NextProps, prevState) {
    if (prevState.counter <nextprops.maxcount return nextprops.maxcount retourner null rendre retour>
        <p>Count: {this.state.counter}</p>

      
    )
  }
}</nextprops.maxcount>

Dans le composant Counter , nous vérifions si counter est plus petit que maxCount . Si c'est le cas, nous définissons la counter de la valeur de maxCount . Sinon, nous ne faisons rien.

Phase de mise à jour

Une phase de mise à jour se produit lorsque les accessoires ou l'état du composant changent. Comme les montures, les mises à jour ont également leur propre ensemble de méthodes disponibles, que nous présenterons ensuite. Autrement dit, il convient de noter que render() et getDerivedStateFromProps() tirera également à ce stade.

DevracomponentUpdate ()

Lorsque l'état ou les accessoires du composant modifie, nous pouvons utiliser shouldComponentUpdate() pour contrôler si le composant doit être mis à jour. Cette méthode est appelée avant le rendu se produit et lorsque l'état et les accessoires sont reçus. Le comportement par défaut est true . Pour renvoyer chaque fois que l'État ou les accessoires changent, nous faisons cela:

 devraComponentUpDate (nextProps, nextState) {
  renvoie this.state.value! == NextState.Value;
}

Lorsque false est renvoyé, le composant ne sera pas mis à jour, mais appelle plutôt render() pour afficher le composant.

getSnaphotbeForeupdate ()

Une chose que nous pouvons faire est de capturer l'état du composant à un moment donné, ce qui est conçu pour ce à quoi getSnapshotBeforeUpdate() est conçu. Il est appelé après render() mais avant de combler de nouvelles modifications au DOM. La valeur de retour est réalisée comme le troisième paramètre à componentDidUpdate() .

Il prend l'état et les accessoires précédents comme paramètres:

 getSnapshotBeforeupdate (prevprops, prevState) {
  // ...
}

À mon avis, il y a peu de cas d'utilisation pour cette approche. Il s'agit d'une méthode de cycle de vie que vous ne pouvez pas utiliser souvent.

ComponentDidupDate ()

Ajoutez componentDidUpdate() à la liste des méthodes, où le nom dit à peu près tout. Si le composant est mis à jour, nous pouvons utiliser cette méthode pour l'accrocher à ce moment et la transmettre aux accessoires et à l'état précédents du composant.

 ComponentDidupdate (prevprops, prevState) {
  if (prevstate.counter! == this.state.counter) {
    // ...
  }
}

Si vous avez déjà utilisé getSnapshotBeforeUpdate() , vous pouvez également transmettre la valeur de retour en tant que paramètre sur componentDidUpdate() :

 ComponentDidupDate (prevprops, prevState, snapshot) {
  if (prevstate.counter! == this.state.counter) {
    // ....
  }
}

Phase de désinstallation

Nous voyons presque l'opposé de la phase de montage ici. Comme vous pouvez vous y attendre, la désinstallation se produit lorsque le composant est effacé du DOM et n'est plus disponible.

Nous n'avons qu'une seule méthode ici: componentWillUnmount()

Ceci est appelé avant que le composant ne soit désinstallé et détruit. C'est là que nous voulons effectuer tout nettoyage nécessaire après le départ du composant, tel que la suppression des écouteurs d'événements qui pourraient être ajoutés dans componentDidMount() ou effacer l'abonnement.

 // Supprimer le composant de l'écouteur d'événementswillunmount () {
  el.removeeventListener ()
}

Phase de gestion des erreurs

Il peut y avoir des problèmes dans la composante, ce qui peut entraîner des erreurs. Nous utilisons des limites d'erreur depuis un certain temps pour aider à résoudre ce problème. Ce composant limite d'erreur utilise certaines méthodes pour nous aider à gérer les erreurs possibles.

GetderivedStateFromError ()

Nous utilisons getDerivedStateFromError() pour attraper toutes les erreurs lancées du composant enfant, puis nous l'utilisons pour mettre à jour l'état du composant.

 Class Errorboundary étend React.

  constructeur (accessoires) {
    super (accessoires);
    this.state = {
      Haserror: Faux
    };
  }

  statique GetderivedStateFromError (erreur) {
    return {Haserror: true};
  }

  rendre() {
    if (this.state.haserror) {
      Retour (
        <h1 id="Oups-quelque-chose-s-est-mal-passé">Oups, quelque chose s'est mal passé :(</h1>
      ));
    }

    Renvoyez ceci.props.children;
  }
}

Dans cet exemple, lorsqu'une erreur est jetée à partir du composant enfant, le composant ErrorBoundary affichera "oh, un problème s'est produit".

ComponentDidCatch ()

Bien que getDerivedStateFromError() convient à la mise à jour de l'état d'un composant en cas d'effets secondaires tels que la journalisation des erreurs, nous devons utiliser componentDidCatch() car il est appelé pendant la phase de validation, à laquelle le DOM a été mis à jour.

 ComponentDidCatch (erreur, info) {
  // Log des erreurs au service}

getDerivedStateFromError() et componentDidCatch() peuvent être utilisés dans le composant ErrorBoundary :

 Class Errorboundary étend React.

  constructeur (accessoires) {
    super (accessoires);
    this.state = {
      Haserror: Faux
    };
  }

  statique GetderivedStateFromError (erreur) {
    return {Haserror: true};
  }

  ComponentDidCatch (erreur, info) {
    // Log des erreurs au service}

  rendre() {
    if (this.state.haserror) {
      Retour (
        <h1 id="Oups-quelque-chose-s-est-mal-passé">Oups, quelque chose s'est mal passé :(</h1>
      ));
    }

    Renvoyez ceci.props.children;
  }
}

Ceci est le cycle de vie des composants React!

C'est une chose cool de comprendre comment les composants réactifs interagissent avec DOM. Il est facile de penser que une "magie" se produira, puis quelque chose apparaîtra sur la page. Mais le cycle de vie des composants React montre que cette folie est ordonnée, et elle vise à nous donner beaucoup de contrôle sur ce qui se passe à partir du moment où le composant atteint le Dom au moment où il disparaît.

Nous couvrons beaucoup de choses dans un espace relativement court, mais j'espère que cela vous donne une bonne idée de la façon dont React gère les composants et des capacités que nous avons à chaque étape du traitement. Si vous n'êtes pas clair sur quoi que ce soit présenté ici, n'hésitez pas à poser des questions et j'aimerais faire de mon mieux pour vous aider!

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
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
Les astuces CSS perdues de Cohost.orgLes astuces CSS perdues de Cohost.orgApr 25, 2025 am 09:51 AM

Dans cet article, Blackle Mori vous montre quelques-uns des hacks trouvés tout en essayant de repousser les limites du support HTML de Cohost. Utilisez-les si vous osez, de peur que vous soyez également étiqueté un criminel CSS.

Style CSS de niveau supérieur pour les curseursStyle CSS de niveau supérieur pour les curseursApr 23, 2025 am 11:04 AM

Les curseurs personnalisés avec CSS sont excellents, mais nous pouvons faire passer les choses au niveau supérieur avec JavaScript. À l'aide de JavaScript, nous pouvons passer entre les états du curseur, placer du texte dynamique dans le curseur, appliquer des animations complexes et appliquer des filtres.

Worlds Collide: Détection de collision de l'ordre clé à l'aide de requêtes de styleWorlds Collide: Détection de collision de l'ordre clé à l'aide de requêtes de styleApr 23, 2025 am 10:42 AM

Les animations CSS interactives avec des éléments se ricochent semblent plus plausibles en 2025. Bien qu'il soit inutile de mettre en œuvre Pong dans CSS, la flexibilité et la puissance croissantes de CSS renforcent le soupçon de Lee selon lequel un jour, ce sera un jour

Utilisation du filtre de fond CSS pour les effets d'interface utilisateurUtilisation du filtre de fond CSS pour les effets d'interface utilisateurApr 23, 2025 am 10:20 AM

Conseils et astuces sur l'utilisation de la propriété CSS Back-Filter pour styliser les interfaces utilisateur. Vous apprendrez à superposer des filtres en toile de fond entre plusieurs éléments et à les intégrer à d'autres effets graphiques CSS pour créer des conceptions élaborées.

Smil sur?Smil sur?Apr 23, 2025 am 09:57 AM

Eh bien, il s'avère que les fonctionnalités d'animation intégrées de SVG n'ont jamais été obsolètes comme prévu. Bien sûr, CSS et JavaScript sont plus que capables de porter la charge, mais il est bon de savoir que Smil n'est pas mort dans l'eau comme précédemment

'Pretty' est dans l'œil du spectateur'Pretty' est dans l'œil du spectateurApr 23, 2025 am 09:40 AM

Yay, laissez-le saut pour le wat-wrap: joli atterrissage dans la technologie safari aperçu! Mais méfiez-vous qu'il est différent de la façon dont il fonctionne dans les navigateurs de chrome.

CSS-Tricks raconte xliiiCSS-Tricks raconte xliiiApr 23, 2025 am 09:35 AM

Cette mise à jour de CSS-Tricks met en évidence des progrès significatifs dans l'Almanac, des apparitions de podcast récentes, un nouveau guide CSS Counter et l'ajout de plusieurs nouveaux auteurs contribuant un contenu précieux.

La fonctionnalité @Apply de Tailwind est meilleure qu'il n'y paraîtLa fonctionnalité @Apply de Tailwind est meilleure qu'il n'y paraîtApr 23, 2025 am 09:23 AM

La plupart du temps, les gens présentent la fonctionnalité de Tailwind avec l'un des utilitaires à propriété unique de Tailwind (qui modifie une seule déclaration CSS). Lorsqu'il est présenté de cette façon, @Apply ne semble pas du tout prometteur. So évidence

See all articles

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Outils chauds

Listes Sec

Listes Sec

SecLists est le compagnon ultime du testeur de sécurité. Il s'agit d'une collection de différents types de listes fréquemment utilisées lors des évaluations de sécurité, le tout en un seul endroit. SecLists contribue à rendre les tests de sécurité plus efficaces et productifs en fournissant facilement toutes les listes dont un testeur de sécurité pourrait avoir besoin. Les types de listes incluent les noms d'utilisateur, les mots de passe, les URL, les charges utiles floues, les modèles de données sensibles, les shells Web, etc. Le testeur peut simplement extraire ce référentiel sur une nouvelle machine de test et il aura accès à tous les types de listes dont il a besoin.

mPDF

mPDF

mPDF est une bibliothèque PHP qui peut générer des fichiers PDF à partir de HTML encodé en UTF-8. L'auteur original, Ian Back, a écrit mPDF pour générer des fichiers PDF « à la volée » depuis son site Web et gérer différentes langues. Il est plus lent et produit des fichiers plus volumineux lors de l'utilisation de polices Unicode que les scripts originaux comme HTML2FPDF, mais prend en charge les styles CSS, etc. et présente de nombreuses améliorations. Prend en charge presque toutes les langues, y compris RTL (arabe et hébreu) ​​et CJK (chinois, japonais et coréen). Prend en charge les éléments imbriqués au niveau du bloc (tels que P, DIV),

Version Mac de WebStorm

Version Mac de WebStorm

Outils de développement JavaScript utiles

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP