Maison interface Web js tutoriel Réagir à l'analyse d'un exemple de composant d'ordre élevé

Réagir à l'analyse d'un exemple de composant d'ordre élevé

May 26, 2018 am 11:51 AM
react 实例 解析

Cet article vous donne principalement une compréhension approfondie des composants d'ordre supérieur de React. J'espère que vous aurez une compréhension plus claire des composants d'ordre supérieur de React.

1. Dans React, le composant d'ordre supérieur (HOC) est une technologie avancée pour réutiliser la logique des composants. HOC ne fait pas partie de l'API React. Un HOC est une fonction qui prend un composant et renvoie un nouveau composant. Dans React, les composants constituent l’unité de base de la réutilisation du code.

2. Pour expliquer les HOC, prenons les deux exemples suivants

Le composant CommentList affichera une liste de commentaires et les données de la liste proviennent de l'extérieur.

class CommentList extends React.Component {

  constructor() {

   super();

   this.handleChange = this.handleChange.bind(this);

   this.state = {

    // "DataSource" is some global data source

    comments: DataSource.getComments()

   };

  }

 

  componentDidMount() {

   // Subscribe to changes

   DataSource.addChangeListener(this.handleChange);

  }

 

  componentWillUnmount() {

   // Clean up listener

   DataSource.removeChangeListener(this.handleChange);

  }

 

  handleChange() {

   // Update component state whenever the data source changes

   this.setState({

    comments: DataSource.getComments()

   });

  }

 

  render() {

   return (

    <p>

     {this.state.comments.map((comment) => (

      <Comment comment={comment} key={comment.id} />

     ))}

    </p>

   );

  }

 }
Copier après la connexion

Vient ensuite le composant BlogPost, qui est utilisé pour afficher un message de blog

class BlogPost extends React.Component {

  constructor(props) {

   super(props);

   this.handleChange = this.handleChange.bind(this);

   this.state = {

    blogPost: DataSource.getBlogPost(props.id)

   };

  }

 

  componentDidMount() {

   DataSource.addChangeListener(this.handleChange);

  }

 

  componentWillUnmount() {

   DataSource.removeChangeListener(this.handleChange);

  }

 

  handleChange() {

   this.setState({

    blogPost: DataSource.getBlogPost(this.props.id)

   });

  }

 

  render() {

   return <TextBlock text={this.state.blogPost} />;

  }

 }
Copier après la connexion

Les deux composants sont différents. Ils appellent des méthodes différentes de DataSource. également différent, mais la plupart de leurs implémentations sont les mêmes :

1 Une fois le chargement terminé, un écouteur de changement est ajouté au DataSource
2. Lorsque la source de données change, appelez setState
. à l'intérieur de l'écouteur 3. Après la désinstallation, supprimez le changement d'écouteur

Il est concevable que dans les grandes applications, le même modèle d'accès à DataSource et d'appel de setState se reproduise encore et encore. Nous souhaitons faire abstraction de ce processus afin de définir cette logique uniquement en un seul endroit, puis de la partager entre plusieurs composants.

Ensuite, nous écrivons une fonction qui crée un composant. Cette fonction accepte deux paramètres, dont l'un est le composant et l'autre est la fonction. La fonction withSubscription est appelée ci-dessous

const CommentListWithSubscription = withSubscription(

 CommentList,

 (DataSource) => DataSource.getComments()

);

 

const BlogPostWithSubscription = withSubscription(

 BlogPost,

 (DataSource, props) => DataSource.getBlogPost(props.id)

);
Copier après la connexion

Le premier paramètre transmis lors de l'appel de withSubscription est le composant encapsulé, et le deuxième paramètre est une fonction utilisée pour récupérer des données.

Lorsque CommentListWithSubscription et BlogPostWithSubscription sont rendus, CommentList et BlogPost accepteront un accessoire appelé data, qui stocke les données actuellement récupérées de DataSource. Le code withSubscription est le suivant :

// This function takes a component...

function withSubscription(WrappedComponent, selectData) {

 // ...and returns another component...

 return class extends React.Component {

  constructor(props) {

   super(props);

   this.handleChange = this.handleChange.bind(this);

   this.state = {

    data: selectData(DataSource, props)

   };

  }

 

  componentDidMount() {

   // ... that takes care of the subscription...

   DataSource.addChangeListener(this.handleChange);

  }

 

  componentWillUnmount() {

   DataSource.removeChangeListener(this.handleChange);

  }

 

  handleChange() {

   this.setState({

    data: selectData(DataSource, this.props)

   });

  }

 

  render() {

   // ... and renders the wrapped component with the fresh data!

   // Notice that we pass through any additional props

   return <WrappedComponent data={this.state.data} {...this.props} />;

  }

 };

}
Copier après la connexion

HOC ne modifie pas le composant d'entrée et n'utilise pas non plus l'héritage pour réutiliser son comportement. HOC n'est qu'une fonction. Le composant encapsulé accepte tous les accessoires du conteneur, ainsi qu'un nouveau accessoire (données), qui est utilisé pour restituer la sortie du composant encapsulé. HOC ne se soucie pas de la manière dont les données sont utilisées ni de la raison pour laquelle elles sont utilisées, et le composant encapsulé ne se soucie pas de l'endroit où les données sont obtenues.

Étant donné que withSubscription n'est qu'une fonction normale, vous pouvez ajouter n'importe quel nombre de paramètres. Par exemple, vous pouvez rendre le nom du accessoire de données configurable pour isoler davantage le HOC du composant encapsulé.

Soit acceptez une configuration ShouldComponentUpdate, soit configurez les paramètres de la source de données

Il y a certaines choses auxquelles il faut prêter attention lors de l'utilisation de composants d'ordre élevé.

1. Ne modifiez pas le composant d'origine, c'est très important

Il y a les exemples suivants :

function logProps(InputComponent) {

 InputComponent.prototype.componentWillReceiveProps = function(nextProps) {

  console.log(&#39;Current props: &#39;, this.props);

  console.log(&#39;Next props: &#39;, nextProps);

 };

 // The fact that we&#39;re returning the original input is a hint that it has

 // been mutated.

 return InputComponent;

}

 

// EnhancedComponent will log whenever props are received

const EnhancedComponent = logProps(InputComponent);
Copier après la connexion

Il y a quelques problèmes ici, 1. L'entrée Le composant ne peut pas être comparé à celui amélioré. Les composants sont réutilisés individuellement. 2. Si vous appliquez d'autres HOC à EnhancedComponent, composantWillReceiveProps sera également modifié.

Ce HOC ne s'applique pas aux composants de type fonction, car les composants de type fonction n'ont pas de cycle de vie. La fonction HOC doit utiliser la composition au lieu de la modification - en encapsulant le composant d'entrée dans un composant conteneur.

function logProps(WrappedComponent) {

 return class extends React.Component {

  componentWillReceiveProps(nextProps) {

   console.log(&#39;Current props: &#39;, this.props);

   console.log(&#39;Next props: &#39;, nextProps);

  }

  render() {

   // Wraps the input component in a container, without mutating it. Good!

   return <WrappedComponent {...this.props} />;

  }

 }

}
Copier après la connexion

Ce nouveau logProps a les mêmes fonctionnalités que l'ancien logProps, tandis que le nouveau logProps évite les conflits potentiels. Il en va de même pour les composants de type classe et les composants de type fonction.

2. N'utilisez pas de HOC dans la méthode de rendu

L'algorithme diff de React utilise l'identité du composant pour décider s'il doit mettre à jour le sous-arbre existant ou détruire l'ancien sous-arbre et charger un new , si le composant renvoyé par la méthode de rendu est égal au composant précédemment rendu (===), alors React mettra à jour le composant précédemment rendu via l'algorithme diff. Sinon, le sous-arbre précédemment rendu sera complètement déchargé.

render() {

 // A new version of EnhancedComponent is created on every render

 // EnhancedComponent1 !== EnhancedComponent2

 const EnhancedComponent = enhance(MyComponent);

 // That causes the entire subtree to unmount/remount each time!

 return <EnhancedComponent />;

}
Copier après la connexion

Utilisez les HOC en dehors de la définition du composant afin que le composant résultant ne soit créé qu'une seule fois. Dans quelques cas, vous devez appliquer les HOC de manière dynamique, vous devez le faire dans la fonction de cycle de vie ou le constructeur

3 Les méthodes statiques doivent être copiées manuellement

Parfois dans React, c'est très utile. pour définir des méthodes statiques sur les composants. Lorsque vous appliquez des HOC à un composant, bien que le composant d'origine soit enveloppé dans un composant conteneur, le nouveau composant renvoyé n'aura aucune méthode statique du composant d'origine.

// Define a static method

WrappedComponent.staticMethod = function() {/*...*/}

// Now apply an HOC

const EnhancedComponent = enhance(WrappedComponent);

 

// The enhanced component has no static method

typeof EnhancedComponent.staticMethod === &#39;undefined&#39; // true
Copier après la connexion

Pour que le composant renvoyé ait les méthodes statiques du composant d'origine, il est nécessaire de copier les méthodes statiques du composant d'origine vers le nouveau composant à l'intérieur de la fonction.


function enhance(WrappedComponent) {

 class Enhance extends React.Component {/*...*/}

 // Must know exactly which method(s) to copy :(

  // 你也能够借助第三方工具

 Enhance.staticMethod = WrappedComponent.staticMethod;

 return Enhance;

}
Copier après la connexion

4. La référence sur le composant conteneur ne sera pas transmise au composant enveloppé

Bien que les accessoires sur le composant conteneur puissent être facilement transmis au composant encapsulé, mais la référence sur le composant conteneur n'est pas transmise au composant encapsulé. Si vous définissez une référence pour un composant renvoyé via HOC, cette référence fait référence au composant conteneur le plus externe, et non au composant encapsulé.

Recommandations associées

Partage d'exemples d'entrée de composant d'ordre supérieur React

Comment utiliser le composant d'ordre supérieur Vue

Utilisez un exemple très simple pour comprendre l'idée des composants d'ordre supérieur de React.js

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

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

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

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

Explication détaillée de l'erreur Oracle 3114 : comment la résoudre rapidement Explication détaillée de l'erreur Oracle 3114 : comment la résoudre rapidement Mar 08, 2024 pm 02:42 PM

Explication détaillée de l'erreur Oracle 3114 : Comment la résoudre rapidement, des exemples de code spécifiques sont nécessaires Lors du développement et de la gestion de la base de données Oracle, nous rencontrons souvent diverses erreurs, parmi lesquelles l'erreur 3114 est un problème relativement courant. L'erreur 3114 indique généralement un problème avec la connexion à la base de données, qui peut être provoqué par une défaillance du réseau, un arrêt du service de base de données ou des paramètres de chaîne de connexion incorrects. Cet article expliquera en détail la cause de l'erreur 3114 et comment résoudre rapidement ce problème, et joindra le code spécifique.

PHP, Vue et React : Comment choisir le framework front-end le plus adapté ? PHP, Vue et React : Comment choisir le framework front-end le plus adapté ? Mar 15, 2024 pm 05:48 PM

PHP, Vue et React : Comment choisir le framework front-end le plus adapté ? Avec le développement continu de la technologie Internet, les frameworks front-end jouent un rôle essentiel dans le développement Web. PHP, Vue et React sont trois frameworks front-end représentatifs, chacun avec ses propres caractéristiques et avantages. Lorsqu'ils choisissent le framework front-end à utiliser, les développeurs doivent prendre une décision éclairée en fonction des besoins du projet, des compétences de l'équipe et des préférences personnelles. Cet article comparera les caractéristiques et les usages des trois frameworks front-end PHP, Vue et React.

Analyse de la signification et de l'utilisation du point médian en PHP Analyse de la signification et de l'utilisation du point médian en PHP Mar 27, 2024 pm 08:57 PM

[Analyse de la signification et de l'utilisation du point médian PHP] En PHP, le point médian (.) est un opérateur couramment utilisé, utilisé pour connecter deux chaînes ou propriétés ou méthodes d'objets. Dans cet article, nous approfondirons la signification et l’utilisation des points médians en PHP, en les illustrant avec des exemples de code concrets. 1. Opérateur de point médian de chaîne de connexion L’utilisation la plus courante en PHP consiste à connecter deux chaînes. En plaçant . entre deux chaînes, vous pouvez les assembler pour former une nouvelle chaîne. $string1=&qu

Intégration du framework Java et du framework front-end React Intégration du framework Java et du framework front-end React Jun 01, 2024 pm 03:16 PM

Intégration du framework Java et du framework React : Étapes : Configurer le framework Java back-end. Créer une structure de projet. Configurez les outils de construction. Créez des applications React. Écrivez les points de terminaison de l'API REST. Configurez le mécanisme de communication. Cas pratique (SpringBoot+React) : Code Java : Définir le contrôleur RESTfulAPI. Code React : obtenez et affichez les données renvoyées par l'API.

Analyse des nouvelles fonctionnalités de Win11 : Comment ignorer la connexion au compte Microsoft Analyse des nouvelles fonctionnalités de Win11 : Comment ignorer la connexion au compte Microsoft Mar 27, 2024 pm 05:24 PM

Analyse des nouvelles fonctionnalités de Win11 : Comment ignorer la connexion à un compte Microsoft Avec la sortie de Windows 11, de nombreux utilisateurs ont constaté qu'il apportait plus de commodité et de nouvelles fonctionnalités. Cependant, certains utilisateurs n'aiment pas que leur système soit lié à un compte Microsoft et souhaitent ignorer cette étape. Cet article présentera quelques méthodes pour aider les utilisateurs à ne pas se connecter à un compte Microsoft dans Windows 11 afin d'obtenir une expérience plus privée et autonome. Tout d’abord, comprenons pourquoi certains utilisateurs hésitent à se connecter à leur compte Microsoft. D'une part, certains utilisateurs craignent

Apache2 ne peut pas analyser correctement les fichiers PHP Apache2 ne peut pas analyser correctement les fichiers PHP Mar 08, 2024 am 11:09 AM

En raison de contraintes d'espace, voici un bref article : Apache2 est un logiciel de serveur Web couramment utilisé et PHP est un langage de script côté serveur largement utilisé. Lors du processus de création d'un site Web, vous rencontrez parfois le problème qu'Apache2 ne peut pas analyser correctement le fichier PHP, ce qui entraîne l'échec de l'exécution du code PHP. Ce problème est généralement dû au fait qu'Apache2 ne configure pas correctement le module PHP ou que le module PHP est incompatible avec la version d'Apache2. Il existe généralement deux manières de résoudre ce problème :

Comparaison des bibliothèques Java pour l'analyse XML : trouver la meilleure solution Comparaison des bibliothèques Java pour l'analyse XML : trouver la meilleure solution Mar 09, 2024 am 09:10 AM

Introduction XML (Extensible Markup Language) est un format populaire pour stocker et transmettre des données. L'analyse XML en Java est une tâche nécessaire pour de nombreuses applications, de l'échange de données au traitement de documents. Pour analyser efficacement XML, les développeurs peuvent utiliser diverses bibliothèques Java. Cet article comparera certaines des bibliothèques d'analyse XML les plus populaires, en se concentrant sur leurs caractéristiques, fonctionnalités et performances pour aider les développeurs à faire un choix éclairé. Bibliothèque d'analyse DOM (Document Object Model) JavaXMLDOMAPI : une implémentation DOM standard fournie par Oracle. Il fournit un modèle objet qui permet aux développeurs d'accéder et de manipuler des documents XML. DocumentBuilderFactoryfactory=D

La relation entre le nombre d'instances Oracle et les performances de la base de données La relation entre le nombre d'instances Oracle et les performances de la base de données Mar 08, 2024 am 09:27 AM

La relation entre le nombre d'instances Oracle et les performances de la base de données La base de données Oracle est l'un des systèmes de gestion de bases de données relationnelles les plus connus du secteur et est largement utilisée dans le stockage et la gestion de données au niveau de l'entreprise. Dans la base de données Oracle, l'instance est un concept très important. L'instance fait référence à l'environnement d'exécution de la base de données Oracle en mémoire. Chaque instance possède une structure de mémoire et un processus d'arrière-plan indépendants, qui sont utilisés pour traiter les demandes des utilisateurs et gérer les opérations de la base de données. Le nombre d'instances a un impact important sur les performances et la stabilité de la base de données Oracle.

See all articles