React中父子组件的生命周期执行顺序

309 阅读2分钟

react 生命周期指的是组件从创建到卸载的整个过程,每个过程都有对应的钩子函数会被调用,本文将深入探讨React中父子组件的生命周期执行顺序。

React组件的生命周期

在React中,每个组件都有生命周期方法,它们在组件的不同阶段执行。主要的生命周期方法包括:

  • constructor:组件被创建时执行,通常用于初始化状态。

  • render:根据组件的状态和属性返回要渲染的元素。

  • componentDidMount:组件被添加到DOM后执行,通常用于数据获取或订阅。

  • shouldComponentUpdate:在更新过程中判断是否需要重新渲染组件,优化性能。

  • componentDidUpdate:组件更新后执行,通常用于DOM操作或网络请求。

  • componentWillUnmount:组件将被销毁前执行,通常用于取消订阅或清理资源。

React父子组件的生命周期

当在React中使用父子组件时,生命周期方法的执行顺序如下:

父组件的生命周期:

  • constructor:父组件首先执行构造函数,初始化自身状态。

  • render:接下来,父组件的render方法被调用,它返回一颗React元素树,包括子组件。

  • componentDidMount:一旦父组件渲染完成并添加到DOM中,componentDidMount方法被触发。

子组件的生命周期:

  • constructor:接着,子组件的构造函数会执行,初始化子组件的状态。

  • render:子组件的render方法生成子组件的React元素树。

  • componentDidMount:子组件被添加到DOM后,子组件的componentDidMount方法被调用。

更新阶段:

当父组件的状态或属性发生变化时,React会重新渲染组件。在这种情况下,生命周期方法的执行顺序如下:

父组件的生命周期:

  • shouldComponentUpdate:React首先调用父组件的shouldComponentUpdate方法,该方法返回一个布尔值,指示是否需要更新。

  • render:如果shouldComponentUpdate返回true,父组件会重新渲染,包括子组件。

  • componentDidUpdate:一旦父组件和子组件都完成渲染,componentDidUpdate方法会被触发。

子组件的生命周期:

  • shouldComponentUpdate:接着,React调用子组件的shouldComponentUpdate方法,如果父组件重新渲染,子组件也会重新渲染。

  • render:子组件的render方法重新生成子组件的React元素树。

  • componentDidUpdate:子组件完成更新后,componentDidUpdate方法会被调用。

例子

以下是一个简单的React示例,展示了父子组件的生命周期方法执行顺序:


class ParentComponent extends React.Component {

  constructor() {

    super();

    console.log('Parent: constructor');

  }

  


  componentDidMount() {

    console.log('Parent: componentDidMount');

  }

  


  render() {

    console.log('Parent: render');

    return <ChildComponent />;

  }

}

  


class ChildComponent extends React.Component {

  constructor() {

    super();

    console.log('Child: constructor');

  }

  


  componentDidMount() {

    console.log('Child: componentDidMount');

  }

  


  render() {

    console.log('Child: render');

    return <div>Child Component</div>;

  }

}

  


ReactDOM.render(<ParentComponent />, document.getElementById('root'));

上述示例展示了父组件和子组件的生命周期方法执行顺序,你可以在浏览器的开发者工具中查看控制台输出以更好地理解执行顺序。

希望本文对您有所帮助!