react中setState设置值失效

react中setState设置值失效

在学react小书, 练习时遇到问题:

有一只狗,不允许别人摸它,一旦摸它就会叫,然后就跑了;这只狗跑一段时间(2s)以后就会停下来,也不叫了。 完成 Dog组件,当用户点击的时候会执行自身的 bark 和 run 方法。给这个 Dog 组件加上状态 isRunning 和 isBarking,在进行相应的动作的时候设置为 true,停下来的时候设置为 false。

class Dog2 extends Component{
   constructor () {
        super()
        this.state={isRunning:false,isBarking:false}
      }
      
      bark () {
        this.setState({
            isBarking: !this.state.isBarking,
        })
        console.log(this.state.isBarking ? "barking" : "stopbarking")              
      }
      
      run () {
        this.setState({
            isRunning: !this.state.isRunning,
        })
        console.log(this.state.isRunning ? "running" : "stoprunning")
      }
      
     //如果不使用setTimeout定时为0, 则setState无法更新值
     //也就是isRunning的值仍然是false (stoprunning)
     onclickChangeState(){
        setTimeout(()=>this.bark(),0)	//使用setTimeout, isRunning值变为true
        setTimeout(()=>this.run(),0)

		// this.bark()	//不使用setTimeout, isRunning值仍然为false
        // this.run()
        
        setTimeout(()=>{	//使用setTimeout
            this.bark()
            this.run()
        },2000)
     }
    
    render () {
    return (
        <div onClick={this.onclickChangeState.bind(this)}>DOG</div>
        )
    }
}

利用setTimeout可以解决问题, 但是不太懂其中的原理, 应该是react的生命周期的问题(大概率), 如果有人懂, 还请赐教.


版权声明:本文为qq_41475630原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。