Contexte de liaison lors de l'appel de la méthode ES6. Comment accéder à l'objet depuis la méthode appelée callback?

Je suis d'essayer d'envelopper ma tête autour de la syntaxe pour les Classes dans l'ES6. Alors que dans le même temps, l'apprentissage de Tissu natif par Bonnie Eisenman l'Apprentissage de Réagir Natif.

J'ai trouvé une question autour de l'accès à this dans un rappel, lorsque le rappel est une Classe de "méthode". Je suis conscient des enjeux autour lexicale this des rappels ont été soulevées à plusieurs reprises sur StackOverflow. Par exemple, dans
Comment accéder à la corriger " ce " contexte à l'intérieur d'un rappel?.

Basé sur mes recherches en ligne, j'ai trouver une solution. Mais je ne suis pas sûr que ce est la bonne façon de le faire dans l'ES6.

Mon problème est venu à propos, quand j'ai essayé ce qui suit ci-dessous:

class WeatherProject extends Component {
  constructor(props) {
    super(props);
    this.state = {
      zip: ''
    };
  }

  _handleTextChange(event) {
    console.log(event.nativeEvent.text);
    this.setState({zip: event.nativeEvent.text})
  }

  render() {
    return (
      <TextInput
        style={styles.input}
        onSubmitEditing={this._handleTextChange}/>
    );
  }
}

(Que je n'ai légèrement modifié à partir de l'exemple dans le livre pour correspondre à l'ES6 classe syntaxe et l'importation/l'exportation de la syntaxe au lieu de l'Exiger.)

Si je fais cela, le this dans _handleTextChange est pas défini (impossible de lire la propriété 'setState' undefined). J'ai été surpris par cela. En provenance d'autres langages à objets, je suis d'interprétation, comme si cette méthode se comporte plus comme si c'était une méthode statique.

J'ai été en mesure de résoudre ce problème en ignorant la méthode de la classe et à l'aide de la flèche de la notation. onSubmitEditing={event => this.setState({name: event.nativeEvent.text})}. Qui fonctionne très bien. Je n'ai pas de problèmes ou de confusion.

Je veux vraiment travailler comment appeler une méthode de classe. Après pas mal de recherche j'ai réussi à le faire fonctionner de la manière suivante: onSubmitEditing={this._handleTextChange.bind(this)}. Peut-être que j'ai mal compris l'un des aspects fondamentaux de JavaScript (je suis débutant en JS), mais cela semble complètement fou de moi. Est-il vraiment pas moyen d'accéder au contexte d'un objet à partir de l'intérieur d'une méthode sans explicitement la liaison de l'objet en arrière sur... sa propre méthode, au point où il est appelé?

J'ai aussi essayé d'ajouter var self = this; dans le constructeur et l'appel self.setState dans _handleTextChange. Mais n'est-ce pas trop surpris de trouver que cela ne fonctionnait pas.

Quelle est la manière correcte de l'accès d'un objet dans l'un de ses méthodes quand il est appelé comme un rappel?

source d'informationauteur rod