Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/27.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 为什么我的按钮需要点击两次才能触发_Javascript_Reactjs - Fatal编程技术网

Javascript 为什么我的按钮需要点击两次才能触发

Javascript 为什么我的按钮需要点击两次才能触发,javascript,reactjs,Javascript,Reactjs,每次我在input中键入新内容时,我都会尝试检测重复内容,我使用一个简单的进行循环,问题是如果新输入内容不是重复内容,我需要单击按钮两次,但如果新输入内容是重复内容,则效果很好,这是我的代码 teken(event){ this.setState({nama: event.target.value}); const angka = todos.length; for(var i = 0; i < todos.length; i++){ {if(todos

每次我在
input
中键入新内容时,我都会尝试检测重复内容,我使用一个简单的
进行循环
,问题是如果新输入内容不是重复内容,我需要单击按钮两次,但如果新输入内容是重复内容,则效果很好,这是我的代码

teken(event){
    this.setState({nama: event.target.value});
    const angka = todos.length;
    for(var i = 0; i < todos.length; i++){
      {if(todos[i].nama === this.state.value){
        this.setState({beda: false})
        alert("tidak boleh sama")
        break
      }else if(this.state.beda != false){
        this.setState({beda: true})
      }
    }
    }
    if(this.state.beda){
      alert("gas")
    }
    event.preventDefault();
  }
teken(事件){
this.setState({nama:event.target.value});
常数angka=todos.length;
对于(变量i=0;i

我已经尝试过其他解决方案,但仍然不起作用,我们将感谢您的帮助,在此之前谢谢您。setState()是一个异步函数。您不能保证它会在到达警报代码之前更新状态值。

此.setState()是一个异步函数。您不能保证它会在到达您的警报代码之前更新状态值。

这里的问题是,您将
todos[i].nama
this.state.value
(当前
e.target.value
尚未更新,因为
this.setState
是异步工作的)。 我建议这样做:

teken(event){
  event.preventDefault();
  const newValue = event.target.value

  this.setState({ nama: newValue});
  const angka = todos.length;
  for(var i = 0; i < todos.length; i++){
    if(todos[i].nama === newValue){
      this.setState({ beda: false })
      alert("tidak boleh sama")
      alert("gas")
      break
    }else if(this.state.beda != false){
      this.setState({beda: true})
    }
  }
}
如果要使用更新的数据访问
this.state.counter
,可以执行以下操作:

this.setState({ counter: this.state.counter + 1 }, () => {
  console.log(this.state.counter)
})

这里的问题是,您将
todos[i].nama
this.state.value
(当前
e.target.value
尚未更新,因为
this.setState
是异步工作的)。 我建议这样做:

teken(event){
  event.preventDefault();
  const newValue = event.target.value

  this.setState({ nama: newValue});
  const angka = todos.length;
  for(var i = 0; i < todos.length; i++){
    if(todos[i].nama === newValue){
      this.setState({ beda: false })
      alert("tidak boleh sama")
      alert("gas")
      break
    }else if(this.state.beda != false){
      this.setState({beda: true})
    }
  }
}
如果要使用更新的数据访问
this.state.counter
,可以执行以下操作:

this.setState({ counter: this.state.counter + 1 }, () => {
  console.log(this.state.counter)
})