Javascript 关于在for循环中使用setState更新状态的语法问题

Javascript 关于在for循环中使用setState更新状态的语法问题,javascript,reactjs,frontend,setstate,Javascript,Reactjs,Frontend,Setstate,我试图根据某些条件更新状态,这些条件包括数组中特定对象的值。我尝试了各种语法,这些语法给了我一个错误,比如this.setState(this.state.destinations[I].map(destinations=>destinations.visibilityStatus=false))我知道除了setState之外,我写的所有东西都在工作。在下面的代码中,您将找到相关函数,其中使用其当前语法更新所有对象的visibilityStatus,而不是特定对象的visibilityStatu

我试图根据某些条件更新状态,这些条件包括数组中特定对象的值。我尝试了各种语法,这些语法给了我一个错误,比如
this.setState(this.state.destinations[I].map(destinations=>destinations.visibilityStatus=false))
我知道除了setState之外,我写的所有东西都在工作。在下面的代码中,您将找到相关函数,其中使用其当前语法更新所有对象的visibilityStatus,而不是特定对象的visibilityStatus。我如何编写setState,使其理论上以这种方式更新状态
this.setState(this.state.destinations.map(destinations=>destinations.visibilityStatus=false))
或另一种编写方式(仍然不起作用)
this.state.destinations[I]。visibilityStatus==false

这是函数的当前代码,如果您需要更多详细信息,请告诉我们,但通常情况下,这就足够了,因为这更多是语法问题,而不是逻辑结构问题。感谢您抽出时间:

updateDestinationsVisibilityStatus=()=>{
      for(var i =0; i<this.state.destinations.length; i++){
          for( var n=0; n<this.state.destinations[i].visibilityTime.length; n++){
          if(this.state.destinations[i].visibilityTime[n].visibility===false && this.state.timerString===this.state.destinations[i].visibilityTime[n].value)
          {  this.setState (this.state.destinations.map(destinations=>destinations.visibilityStatus=false))}

          else if (this.state.destinations[i].visibilityTime[n].visibility===true && this.state.timerString===this.state.destinations[i].visibilityTime[n].value)
          {  this.setState (this.state.destinations.map(destinations=>destinations.visibilityStatus=true))}
          console.log(this.state.destinations[i].visibilityStatus)

      }
    }

  }
updateDestinationsVisibilityStatus=()=>{
对于(var i=0;idestinations.visibilityStatus=true))}
console.log(this.state.destinations[i].visibilityStatus)
}
}
}

每次事件对一个属性调用setState的次数不得超过一次。 它是异步的,状态不会立即更改。根据经验,如果你不止一次打电话,你应该确保通过考试

这是在您的案例中保存的:

updateDestinationsVisibilityStatus = () => {
    let dest = this.state.destinations; // use local variable
    for (let i = 0; i < dest.length; i++) {
        for (let n = 0; n < dest[i].visibilityTime.length; n++) {
            if (dest[i].visibilityTime[n].visibility === false && this.state.timerString === dest[i].visibilityTime[n].value) {
                dest[i].visibilityStatus = false; // manipulate that local
            } else if (dest[i].visibilityTime[n].visibility === true && this.state.timerString === dest[i].visibilityTime[n].value) {
                dest[i].visibilityStatus = true;
            }
        }
    }

    this.setState({destinations: dest}); // write back to state
}
updateDestinationsVisibilityStatus=()=>{
设dest=this.state.destinations;//使用局部变量
for(设i=0;i
Hey,@colburton您的语法命题是正确的,谢谢您,这里有一些您忘记的东西,它是dest.visibilityStatus中dest前面的[i]。我会为你编辑它。我以前尝试过使用局部变量,但我不知道放在哪里,因为我认为这个.setState({destinations:x})只改变了this.state.destinations,所以我使用了这个.setState(this.state),但它不起作用。再次感谢您还有一件事我已经删除了局部变量,并用this.state.destinations替换了它,这对任何感兴趣的人都适用,除非您想缩短代码它可以工作,但它有副作用,您应该避免。不要直接写信给这个州。