javascript - 为什么要在react中输出之前的props?

标签 javascript reactjs

当我在React中使用const { number } = this.props时,我得到了一些令人困惑的东西,请查看控制台,为什么第一次输出时两个数字不同。

class App extends React.Component {
  constructor(props) {
    super(props)
    this.state = {
      number: 0
    }
  }
  componentDidMount() {
    setTimeout(() => {
      this.setState({
        number: 9
      })
    }, 1000)
  }
  render() {
    return <Child number={this.state.number} />
  }
}

class Child extends React.Component {
  render() {
    const { number } = this.props
    setTimeout(() => {
      console.log(this.props.number, number) // here, why two numbers is different when first output.
    }, 2000)
    return <h2>please see console, why two numbers in fisrt line in console output is different</h2>
  }
}

ReactDOM.render(
  <App />
, mountNode);
<div id="container" style="padding: 24px"></div>
<script>
  var mountNode = document.getElementById('container');
</script>

<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>

最佳答案

Child组件的render方法会被调用两次,

  1. App 初始安装期间,状态编号为 0
  2. 然后,App 的 componentDidMount 执行一秒后,state 更改为 number:9。

因此渲染在一秒内被调用两次。在第一个调用中,数字是 0,第二个数字是 9。问题是 console.log 超时 2 秒,到那时 this.props.number 将是 9。

但是控制台日志的第一次执行看到数字是0并且它绑定(bind)到它的关闭。 所以它打印 9 和 0

第二个打印 9 和 9

关于javascript - 为什么要在react中输出之前的props?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49933393/

相关文章:

javascript - node_modules 文件夹上的 Github Pages 404

reactjs - 为什么 'create-react-app' 总是给我 2 个而不是 4 个缩进空间?

javascript - 基于验证将元素推送到对象

javascript - Websocket 是否发送和接收完整消息?

javascript - 如何使用 Typescript 映射进行 ElasticSearch 响应?

javascript - 如何在此代码中访问名称

javascript - D3 鼠标同时在两个图形上移动

reactjs - 什么是 MobileTearSheet?它在哪里?

javascript - 使用相同的表单更新添加的数据 | react 堆

javascript - 当组件更新 props 时点击 DOM 元素