Javascript 为什么在react中输出以前的道具?

Javascript 为什么在react中输出以前的道具?,javascript,reactjs,Javascript,Reactjs,当我在React中使用likeconst{number}=this.props时,我得到了一些混淆的东西,请参见控制台,为什么第一次输出时两个数字是不同的 类应用程序扩展了React.Component{ 建造师(道具){ 超级(道具) 此.state={ 编号:0 } } componentDidMount(){ 设置超时(()=>{ 这是我的国家({ 电话:9 }) }, 1000) } render(){ 返回 } } 子类扩展了React.Component{ render(){ co

当我在React中使用like
const{number}=this.props时,我得到了一些混淆的东西,请参见控制台,为什么第一次输出时两个数字是不同的

类应用程序扩展了React.Component{
建造师(道具){
超级(道具)
此.state={
编号:0
}
}
componentDidMount(){
设置超时(()=>{
这是我的国家({
电话:9
})
}, 1000)
}
render(){
返回
}
}
子类扩展了React.Component{
render(){
const{number}=this.props
设置超时(()=>{
console.log(this.props.number,number)//这里是第一次输出时两个数字不同的原因。
}, 2000)
返回请参见控制台,为什么控制台输出第一行中的两个数字不同
}
}
ReactDOM.render(
,mountNode)

var mountNode=document.getElementById('container');

子组件的渲染方法将被调用两次

  • 在初始装载状态号为0的
    应用程序期间
  • 然后,在应用程序的
    组件didmount
    执行一秒钟后,状态变为数字:9
  • 因此,渲染在一秒钟内调用两次。第一个电话号码是0,第二个号码是9。问题是您正在超时console.log 2秒,到那时,
    这个.props.number将是9

    但是控制台日志的第一次执行看到这个数字是0,并且它被绑定到它的闭包。 所以它打印9和0


    第二个将打印9和9,子组件的渲染方法将被调用两次

  • 在初始装载状态号为0的
    应用程序期间
  • 然后,在应用程序的
    组件didmount
    执行一秒钟后,状态变为数字:9
  • 因此,渲染在一秒钟内调用两次。第一个电话号码是0,第二个号码是9。问题是您正在超时console.log 2秒,到那时,
    这个.props.number将是9

    但是控制台日志的第一次执行看到这个数字是0,并且它被绑定到它的闭包。 所以它打印9和0

    第二个打印9和9