Javascript 向父组件发送状态

Javascript 向父组件发送状态,javascript,reactjs,state,Javascript,Reactjs,State,我使用复选框将数据添加/删除到状态(即字符串数组) 在我的父组件上,我使用emails属性来接收这个字符串数组并在另一个状态下重新填充 emails={(emails) => this.setState({ emails }, () => console.log(this.state.emails))} 但是我有一个问题,我假设是由于状态是异步的,第一个状态更新正确,但是我的第二个状态,在父组件中,仅在第二次交互时更新,导致了相反的结果预期,首先我单击复选框,字符串被添加到第一个

我使用复选框将数据添加/删除到状态(即字符串数组)

在我的父组件上,我使用emails属性来接收这个字符串数组并在另一个状态下重新填充

emails={(emails) => 
this.setState({ emails }, () => console.log(this.state.emails))}

但是我有一个问题,我假设是由于状态是异步的,第一个状态更新正确,但是我的第二个状态,在父组件中,仅在第二次交互时更新,导致了相反的结果预期,首先我单击复选框,字符串被添加到第一个状态,而不是第二个状态,然后,当我再次单击(取消选中)时,它将从第一个状态中删除,并在第二个状态中添加。如何解决这个问题?

要解决这个问题,我只需直接在父组件上使用状态,我的复选框的onClick变为

  const checkboxClick = (e, contact) => {
    e.stopPropagation()
    props.emails(contact.email)
  }
我在父组件上收到这些电子邮件,如下所示

emails={x => {
  const resultado = this.state.emails.indexOf(x)
  if (resultado === -1) {
    this.setState({ emails: [...this.state.emails, x] })
  } else {
    this.state.emails.splice(resultado, 1)
  }
}}

您知道StackOverflow支持添加使用React的代码段吗?你可以在你的问题中为我们重现你的问题。这也将极大地帮助你获得有用答案的机会。你应该只有一个真相来源。删除子组件的本地状态i,并仅使用父状态。试试看,也许它会帮你解决这个问题。就是这样,我只是把字符串直接传递给父状态,然后把验证放在那里,现在它工作得很好,谢谢
  const checkboxClick = (e, contact) => {
    e.stopPropagation()
    props.emails(contact.email)
  }
emails={x => {
  const resultado = this.state.emails.indexOf(x)
  if (resultado === -1) {
    this.setState({ emails: [...this.state.emails, x] })
  } else {
    this.state.emails.splice(resultado, 1)
  }
}}