美文网首页
React之子组件重新渲染

React之子组件重新渲染

作者: 智明书 | 来源:发表于2018-08-07 21:19 被阅读1674次

​ 一直对React组件的生命周期理解的不够深刻,例如在React官网中,有这样一句话来描述shouldComponentUpdate()方法:

shouldComponentUpdate() is invoked before rendering when new props or state are being received.

​ 我对这句话的理解是:shouldComponentUpdate()只有在propsstate更新的时候才会被调用。于是很自然的,我一直默认这样一种场景:当父组件进行重新渲染(re-render)操作的时候,如果子组件的propsstate没有改变,那么子组件就不会调用shouldComponentUpdate(),进而也不会调用render()方法。但是,事实是这样的吗?

​ 我们建立这样一个场景:父组件能够周期性的进行渲染,子组件接收父组件传递的一个props,但并不曾改变它,即验证该场景下shouldComponentUpdate()是否会被调用。父组件的render()方法如下:

  render() {
    return (
      <div>
        <h1>Hello, world!</h1>
        <h2>It is {this.state.date.toLocaleTimeString()}.</h2>
        <Child test={1}/>
      </div>
    );
  }

​ 俗话说的好,talk is cheap, show me the code。使用CodePen来创建这样的一个场景。在子组件所有的生命周期函数中打上log,特别的在shouldComponentUpdate()中验证nextPropsthis.props

  shouldComponentUpdate(nextProps, nextState) {
    console.log(nextProps.test === this.props.test);
    console.log('shouldComponentUpdate');
    return true;
  }

​ 结果大大出乎我的意料,console.log(nextProps.test === this.props.test);输出永远是true,但是控制台内不停地打印出:

"componentWillReceiveProps"
true
"shouldComponentUpdate"
"componentWillUpdate"
"render"
"componentDidUpdate"

​ 子组件内并没有任何propsstate的改变,但是子组件依然不停的进行re-render!这跟文章开头给出的React官网的引用好像背道而驰!对于该问题,本人还不能作出很好的回答,于是在stackoverflow上放出了问题,等待高人解答吧。但目前可以明确的一点是:当父组件进行重新渲染操作时,即使子组件的propsstate没有做出任何改变,也会同样进行重新渲染。

相关文章

  • React之子组件重新渲染

    ​ 一直对React组件的生命周期理解的不够深刻,例如在React官网中,有这样一句话来描述shouldCom...

  • React概念

    React 的核心思想是:封装组件。各个组件维护自己的状态和 UI,当状态变更,自动重新渲染整个组件。 React...

  • 浅谈react中的state和props

    1、state的作用 state是React中组件的一个对象,React中,更新组件的state,会导致重新渲染用...

  • React 生命周期

    React 生命周期 初始化周期 组件重新渲染生命周期 组件卸载生命周期

  • 前端-React

    React 知识 React 的核心思想是:封装组件。各个组件维护自己的状态和 UI,当状态变更,自动重新渲染整个...

  • react-native知识点

    react-native知识点 PureComponent是纯组件 即无状态组件,更新state不会触发重新渲染,...

  • 在 React 函数式组件中使用 useState, 变量,us

    在 React 函数式组件中使用 useState, 变量,useRef 的时机 变量 变量在每次组件重新渲染的时...

  • React、Vue、小程序更新数据并渲染大比较

    今天我们来谈谈在react、vue、小程序中是如何更新数据并渲染组件的 React React中,直接赋值不会重新...

  • Redux-counter example

    Redux 结合 React 使用的最基本示例。出于简化,当 store 发生变化,React 组件会手动重新渲染...

  • 关于React组件

    渲染React组件 通过ReactDOM直接渲染 通过React.Component创建组件再通过ReactDOM...

网友评论

      本文标题:React之子组件重新渲染

      本文链接:https://www.haomeiwen.com/subject/nngxfftx.html