Maison > interface Web > js tutoriel > Comment éviter les problèmes de performances lors de la liaison ou de l'intégration de fonctions de flèche dans la méthode de rendu de React ?

Comment éviter les problèmes de performances lors de la liaison ou de l'intégration de fonctions de flèche dans la méthode de rendu de React ?

Linda Hamilton
Libérer: 2024-11-15 10:35:02
original
584 Les gens l'ont consulté

How to Avoid Performance Issues When Binding or Inlining Arrow Functions in React's Render Method?

Comment éviter les fonctions de liaison ou de flèche en ligne dans la méthode de rendu

Dans les composants React, il est crucial d'éviter de lier ou d'insérer des fonctions de flèche dans la méthode de rendu pour optimiser les performances . Lors du nouveau rendu, de nouvelles méthodes sont créées au lieu de réutiliser les anciennes, ce qui entraîne des problèmes de performances.

Considérons l'exemple suivant :

<input onChange={this._handleChange.bind(this)} />
Copier après la connexion

Pour résoudre ce problème, nous pouvons lier le _handleChange méthode dans le constructeur :

constructor(props) {
  super(props);
  this._handleChange = this._handleChange.bind(this);
}
Copier après la connexion

Ou, alternativement, nous pouvons utiliser la syntaxe d'initialisation de propriété :

_handleChange = () => {};
Copier après la connexion

Cependant, des défis surviennent lorsque nous devons transmettre des paramètres supplémentaires au gestionnaire onClick . Par exemple, dans une application Todo, nous pourrions avoir besoin de supprimer un élément d'un tableau en fonction de son index ou de son nom.

todos.map(el => <div key={el} onClick={this._deleteTodo.bind(this, el)}>{el}</div>)
Copier après la connexion

Cette approche crée un nouveau rappel avec le rendu de chaque composant, comme mentionné dans la documentation. .

Alternatives à la liaison à l'intérieur de la méthode de rendu

1. Créer un composant enfant :

Déplacez le contenu de la fonction map vers un composant enfant distinct et transmettez les valeurs comme accessoires. De cette façon, la fonction peut être appelée à partir du composant enfant et transmettre la valeur à la fonction transmise en tant qu'accessoires.

Parent :

deleteTodo = (val) => {
  console.log(val);
};

todos.map((el) => <MyComponent val={el} onClick={this.deleteTodo} />);
Copier après la connexion

Composant enfant (MyComponent) :

class MyComponent extends React.Component {
  deleteTodo = () => {
    this.props.onClick(this.props.val);
  };

  render() {
    return <div onClick={this.deleteTodo}>{this.props.val}</div>;
  }
}
Copier après la connexion

Exemple d'extrait :

class Parent extends React.Component {
  _deleteTodo = (val) => {
    console.log(val);
  };

  render() {
    var todos = ['a', 'b', 'c'];
    return (
      <div>
        {todos.map((el) => (
          <MyComponent key={el} val={el} onClick={this._deleteTodo} />
        ))}
      </div>
    );
  }
}

class MyComponent extends React.Component {
  _deleteTodo = () => {
    console.log('here');
    this.props.onClick(this.props.val);
  };

  render() {
    return <div onClick={this._deleteTodo}>{this.props.val}</div>;
  }
}

ReactDOM.render(<Parent />, document.getElementById('app'));
Copier après la connexion

En implémentant ces alternatives, nous pouvons éviter de lier ou d'insérer des fonctions de flèche à l'intérieur la méthode de rendu, garantissant les bonnes performances et la réutilisabilité du composant.

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!

source:php.cn
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal