this.setState est indéfini
Je continue à voir des réponses qui disent à utiliser => ou .bind (), mais aucune de ces solutions travaillé.
import React, { Component } from 'react';
import { View, Text, TextInput, StyleSheet } from 'react-native';
export default class MyWeatherApp extends Component {
constructor(props) {
super(props);
this.state = {};
}
getInitialState() {
return {
zip: '',
forecast: null,
};
}
_handleTextChange(event) {
var zip = event.nativeEvent.text;
this.setState({zip: zip});
}
Solution:
_handleTextChange = (event) => {
var zip = event.nativeEvent.text;
this.setState({zip: zip});
alert('click');
}
source d'informationauteur nathanengineer
Vous devez vous connecter pour publier un commentaire.
Lorsque vous
extend
React.Component
avec ES2015 classe syntaxe vous devez lier votre action des gestionnaires d'un contexte de votre classe.Essayez ceci:
onChange={e => _handleTextChange(e)}
Généralement, il est préférable de ne pas utiliser la flèche fonctions ou
bind
méthodes à l'intérieur derender
car il génère une nouvelle copie de la fonction sur n'importe quelrender
appel. Déplacer déclaration de fonction à laclass constructor
.Personnellement, je préfère utiliser la flèche fonctions comme des propriétés de la classe dans ce cas
Ce n'est pas une partie de ES2015 spécification, mais babel stade-0 preset prend en charge cette syntaxe
Vous pouvez en lire plus sur le contexte de liaison à Réagir dans cet article
Me laisser écrire cela en détail. Comme j'ai dû perdre beaucoup de temps dans la recherche & je ne veux pas que quiconque de répéter ce...
Si vous n'avez pas de Flèche de la Fonction vous avez pour lier
this
comme Ligne '9'Un autre moyen est d'utiliser ES6 Flèche de la fonction. Vous avez besoin de ne pas lier " il " dans ce cas. L'installation de "babel étape-1 preset" le permettra.
Exécutez la commande ci-dessous dans votre projet:
npm i babel-preset-stage-1 --save
Votre .babelrc ressemblera à ceci. Spécialement "-1 " dans le preset.
Votre composant sera comme ceci, comme je l'ai dit:
vous pouvez également lier ce dans
constructor
comme ceAucune de ces réponses œuvres. J'ai essayé toutes les options et j'ai toujours l'erreur undefined. Réagir changements trop vite.
Le problème était le suivant: j'ai eu que ERREUR: ce.setState n'est pas une fonction
Donné que je lie ma fonction à l'état d'un composant constructeur, comme ceci:
et ma fonction est:
la solution est d'utiliser
arrow functions
au lieu d'utiliserkeyword
fonction de l'axios demande, parce que c'est source de confusion pour réagir aux reportez-vous à la fonction dans axios demande au lieu de la état des composants.