cette refs devient indéfinie dans la méthode
Je suis en train d'utiliser ce plugin dans mon projet https://github.com/rt2zz/react-native-drawer. J'ai pu faire tourner l'exemple bien, mais avoir de problème d'intégration.
J'obtiens l'erreur dans la méthode openDrawer. "Impossible de lire la propriété tiroir de undefined"
Je devine que je ne suis pas la définition et l'utilisation de la classe dans le droit chemin comme il se doit ( je suis nouveau sur le javascript de la programmation orientée objet ), comme dans l'exemple utiliser React.createClass({
contrairement à la mienne comme l'extension de Composant et constructeur.
Les codes pertinents de ma classe sont comme suit.
class Search extends Component {
constructor(props) {
super(props);
this.state = {
isLoading: true,
dataSource: new ListView.DataSource({
rowHasChanged: (row1, row2) => row1 !== row2
})
};
}
openDrawer(){
this.refs.drawer.open()
}
getInitialState(){
return {
drawerType: 'overlay',
}
}
Rendu sont
render() {
if (this.state.isLoading) {
return this.renderLoadingView();
}
var controlPanel = <MyControlPanel closeDrawer={() => {this.refs.drawer.close()}} />
return (
<View>
<View style={styles.topBar}>
<Drawer
ref="drawer"
>
<MyMainView
/>
</Drawer>
<Text style={styles.topBarMenu}>☰</Text>
<Text style={styles.topBarTitle}>เงินปันผล</Text>
<Text style={styles.topBarRight}></Text>
</View>
source d'informationauteur cjmling
Vous devez vous connecter pour publier un commentaire.
Je pense que c'est mieux si vous venez en arrière à l'aide createClass . L'ES6 moyen de la création de classes (s'étend) a quelques inconvénients par rapport aux createClass : les méthodes sont indépendant (c'est à dire "cela" ne veut pas nécessairement les points de l'objet), aussi vous ne pouvez pas utiliser mixin qui sont assez utiles. L'indépendant méthodes est le problème que vous rencontrez. Vous pouvez également solution de contournement dans le cas où vous avez le contrôle sur l'endroit où la méthode est appelée et lier la méthode (méthode de liaison en javascript par exemple ici: http://www.smashingmagazine.com/2014/01/understanding-javascript-function-prototype-bind/ )
Il ya une meilleure façon que de mettre
this.openDrawer = this.openDrawer.bind(this)
dans le constructeurDéclarer openDrawer méthode avec les flèches de la fonction:
Juste pour le rendre clair pour tout le monde, lors de l'utilisation de ES6
class
(au lieu deReact.createClass
), vous devez lier les méthodes dethis
dans le constructeur.exemple
Note: j'ai pensé que je voudrais ajouter à cette réponse puisque la réponse est marquée comme correcte parle de retour à
React.createClass
. Aussi il a été mentionné dans les commentaires, mais pas tout à fait clair.