Javascript 在react native中的onPress事件期间未定义this.state

Javascript 在react native中的onPress事件期间未定义this.state,javascript,reactjs,Javascript,Reactjs,您好,我是react native的新用户,我的代码是: import-React{ 看法 文本, 文本输入, 组成部分 }从“反应本机”; 从“./styles/SIGN”导入样式; 从“../common/Button”导入按钮; 导出默认类登录扩展组件{ 建造师(道具){ 超级(道具); 此.state={ 电子邮件:“”, 密码:“” }; } render(){ 返回( 电子邮件 this.setState({email:text}) 值={this.state.email} />

您好,我是react native的新用户,我的代码是:

import-React{
看法
文本,
文本输入,
组成部分
}从“反应本机”;
从“./styles/SIGN”导入样式;
从“../common/Button”导入按钮;
导出默认类登录扩展组件{
建造师(道具){
超级(道具);
此.state={
电子邮件:“”,
密码:“”
};
}
render(){
返回(
电子邮件
this.setState({email:text})
值={this.state.email}
/>
密码
this.setState({password:text})}
值={this.state.password}
secureTextEntry={true}
/>
);
}
onPress(){
console.log(this.state.email);
}

}
这是一个有约束力的问题。最简单的解决方案是更改按钮标记的JSX,如下所示:

<Button text={'Sign in'} onPress={this.onPress.bind(this)} />
或者,您甚至可以使用fat arrow es6语法函数来维护与正在创建的组件的“this”绑定:

<Button text={'Sign in'} onPress={() => this.onPress()} />
而不是

// This is not auto-bound so `this.state` will be `undefined`
onPress(){
  console.log(this.state.email);
}
最好的选择是使用ES7特性(如果可用),或者绑定到构造函数中。直接在
按钮上使用匿名函数
onPress={()=>this.onPress()}
onPress={this.onPress.bind(this)}
对性能的影响要小得多
// This is auto-bound so `this` is what you'd expect
onPress = () => {
    console.log(this.state.email);
};
// This is not auto-bound so `this.state` will be `undefined`
onPress(){
  console.log(this.state.email);
}