Javascript

React类式组件生命周期

本文主要是介绍React类式组件生命周期,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

React 类式组件生命周期

1. 首次加载时
1) contructor

类式组件的构造器,可在构造器中初始化组件状态( state )

2) getDerivedStateFromProps

state的值在任何时候都取决于props( props变化时更新state ),接收两个参数propsstate

3) render

渲染函数,返回vnode

4) componentDidMount

组件第一次被渲染到DOM中,可在此钩子中设置定时器,调用AJAX

2. 更新时
1) getDerivedStateFromProps
2) shouldComponentUpdate

根据return的布尔值决定是否更新组件

3) render
4) getSnapshotBeforeUpdate

获取更新前的快照,其返回值默认作为componentDidUpdate第三个参数

5) componentDidUpdate

组件更新之后,其可接收三个参数未更新前的props未更新前的stategetSnapshotBeforeUpdate的返回值

3. 卸载时
1) componentWillUnmount

组件即将卸载之前调用的钩子,可在此阶段销毁定时器

4. Demo
import { Component, Fragment } from 'react';
import { render, unmountComponentAtNode } from 'react-dom';

class Demo extends Component {
  constructor(props) {
    super(props);
    this.state = { title: 'This is a initial demo.' };
    console.log('constructor');
  }

  static getDerivedStateFromProps(props, state) {
    console.log('getDerivedStateFromProps');
    return { subTitle: props.subTitle };
  }

  componentDidMount() {
    console.log('componentDidMount');
  }

  getSnapshotBeforeUpdate() {
    console.log('getSnapshotBeforeUpdate');
    return { snapshotRes: 'getSnapshotBeforeUpdate' };
  }

  shouldComponentUpdate() {
    console.log('shouldComponentUpdate');
    return true;
  }

  componentDidUpdate(preProps,preState,snapshotValue) {
    console.log('componentDidUpdate');
  }

  componentWillUnmount() {
    console.log('componentWillUnmount');
  }

  /**
   * 使用箭头函数,防止找不到this
   */
  updateComponent = () => {
    this.forceUpdate();
  }

  unmountComponent = () => {
    unmountComponentAtNode(document.querySelector('#app'));
  }

  render() {
    console.log('render');
    const { title, subTitle } = this.state;
    return (
      <Fragment>
        <h1>{ title }</h1>
        <h2>{ suTitle }</h2>
        <button onClick={ this.updateComponent }>Force update</button>
        <button onClick={ this.unmountComponent }>Unmount component</button>
      </Fragment>
    )
  }
}

render(<Demo suTitle="Alison" />, document.querySelector('#app'));
这篇关于React类式组件生命周期的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!