Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 每次按下Textinput时都会调用TouchableOpacity_Javascript_Ajax_React Native_Input - Fatal编程技术网

Javascript 每次按下Textinput时都会调用TouchableOpacity

Javascript 每次按下Textinput时都会调用TouchableOpacity,javascript,ajax,react-native,input,Javascript,Ajax,React Native,Input,每当我按下任一文本输入字段时,登录函数都会调用 可触摸语句: <TouchableOpacity style={InputFieldStyle.submitButton} onPress={this.login(this.state.email, this.state.password)}> <Text style={InputFieldStyle.submitButtonText}>Submit Me</Text> &

每当我按下任一文本输入字段时,登录函数都会调用

可触摸语句:

<TouchableOpacity
     style={InputFieldStyle.submitButton}
     onPress={this.login(this.state.email, this.state.password)}>
          <Text style={InputFieldStyle.submitButtonText}>Submit Me</Text>
</TouchableOpacity>

有没有办法阻止它,或者我在这里做错了什么。

你在这里遇到了问题
onPress={this.login(this.state.email,this.state.password)

您必须使用
bind()
方法并将
this
关键字作为第一个参数传递,如
onPress={this.login.bind(this,this.state.email,this.state.password)}

但是您不必将电子邮件和密码作为参数传递,您可以直接从该州访问它们

编辑您的方法,使其看起来像:

login = () => {
  const { email, password } = this.state;
  alert(`Email: ${email} Password: ${password}`);
}
<TouchableOpacity onPress={this.login}>
而你的触感似乎是:

login = () => {
  const { email, password } = this.state;
  alert(`Email: ${email} Password: ${password}`);
}
<TouchableOpacity onPress={this.login}>

从“react native”导入TextInput,并使用它而不是InputField,通过使用setState,当您单击submit时,整个电子邮件和密码将只提交一次。请参阅此内容。这也将帮助您解决问题。

登录()
是一个箭头函数,因此您不需要
绑定()
it。实际问题是
onPress
上的
TouchableOpacity
道具。该道具应该是一个在按下按钮时调用的功能

不是传递函数,而是调用
render()
中的login()函数,并将返回值(未定义)传递给按钮。每次调用
render()
时,都会调用
login()

解决方案将是改变:


{this.login(this.state.email,this.state.password)}{…otherProps}>

即使接受的答案有效,也不是一个好的做法。在渲染中绑定东西不是一个好主意(即使它可以工作),并且会使代码在将来更难阅读

另外,既然你的状态已经是你的状态,为什么你需要将电子邮件和密码作为参数传递

这样做,只会复制一些数据,很容易在更复杂的代码中丢失

以更干净的方式解决问题的一个简单方法是:

login = () => {
  const { email, password } = this.state
  alert(`Email: ${email} Password: ${password}`);
}

//render
<TouchableOpacity onPress={this.login}>
login=()=>{
const{email,password}=this.state
警报(`Email:${Email}密码:${Password}`);
}
//渲染

将其设置为如下箭头函数 . onPress={()=>this.login()} .
只有当你按下某个按钮时,它才会被调用。

这肯定是这个问题的错误答案。这样,您必须为每个事件生成两个函数。这样,您的代码将无法读取,并且会降低大型应用程序的应用程序性能。因为每次调用两个函数做一件事