Maison > interface Web > js tutoriel > Pourquoi « this.setState » n'est-il pas défini ou n'est-il pas une fonction dans mon gestionnaire d'événements React ?

Pourquoi « this.setState » n'est-il pas défini ou n'est-il pas une fonction dans mon gestionnaire d'événements React ?

DDD
Libérer: 2024-12-18 08:27:11
original
726 Les gens l'ont consulté

Why is `this.setState` undefined or not a function in my React event handler?

Accès à l'instance React (this) dans le gestionnaire d'événements

Problème :

Lors de la tentative de mettre à jour l'état React à l'aide de this.setState dans un gestionnaire d'événements, vous pouvez rencontrer des erreurs telles que "Cannot lire la propriété 'setState' de non défini" ou "this.setState n'est pas une fonction". Cela indique que le mot clé this ne fait pas référence à l'instance du composant dans le gestionnaire d'événements.

Explication :

Dans les composants ES6 React, les fonctions liées au composant doivent être définies dans le constructeur ou lié explicitement dans la méthode de rendu en utilisant this.methodName.bind(this). En effet, la syntaxe de la fonction flèche JavaScript (par exemple () =>) crée une nouvelle portée de fonction et ne la lie pas automatiquement au composant.

Solution :

Méthode 1 (reliure dans Constructeur) :

constructor(props) {
  super(props);
  this.state = { inputContent: 'startValue' };
  this.changeContent = this.changeContent.bind(this); // Binding here
}
Copier après la connexion

Méthode 2 (liaison dans le rendu) :

render() {
  return (
    <input onChange={this.changeContent.bind(this)} />
  );
}
Copier après la connexion

Remarque : Lors de l'utilisation de React. createClass, toutes les méthodes sont automatiquement liées à l'instance du composant.

Supplémentaire Correction :

Dans votre code, React.refs.someref doit être remplacé par this.refs.someref pour accéder à la référence de l'élément React. De plus, la méthode sendContent doit être liée au composant à l'aide de l'une des méthodes de liaison ci-dessus.

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