React 16生命周期

173 阅读2分钟

挂载Mounting 阶段 (四个钩子函数)

1.constructor() 阶段

加载的时候调用一次,可以初始化state

2.static getDerivedStateFromProps(props, state) 阶段

因为是静态的,所以是共享的。

组件每次被re-render的时候,包括在组件构建之后(虚拟dom之后,实际dom挂载之前),每次获取新的props或者state之后。

每次接收新的props之后都会返回一个对象作为新的state,返回null则说明不需要更新state。

3.render() 阶段

React中最重要的步骤,创建虚拟dom,进行diff算法,更新dom树都在此进行。

4.componentDidMount() 阶段

组件渲染之后,只调用一次。

更新Updating阶段 (五个钩子函数)

1.static getDerivedStateFromProps(props, state) 阶段

组件每次被re-render的时候,包括在组件构建之后(虚拟dom之后,实际挂载dom之前),每次获取新的props或state之后。

每次接收新的props之后都会返回一个对象作为新的state,返回null则说明不需要更新state。

配合componentDidUpdate,可以覆盖componentWillReceiveProps的所有用法。

2.shouldComponentUpdate(nextProps,nextState)阶段

组件接收到新的props或者state时调用,return true就会更新dom(使用diff算法更新),return false能阻止更新(不调用render)。

3.render()阶段

react最重要的步骤,创建虚拟dom,进行diff算法,更新dom树都在此进行

4.getSnapshotBeforeUpdate(prevProps, prevState)阶段

触发时间:update发生的时候,在render之后,在组件dom渲染之前。

返回一个值,作为componentDidUpdate的第三个参数。

配合componentDidUpdate, 可以覆盖componentWillUpdate的所有用法。

5.componentDidUpdate()阶段

组件加载时不调用,组件更新完成后调用。

卸载UnMounting阶段 (一个钩子函数)

1.componentWillUnmount()阶段

组件渲染之后调用,只调用一次

Error Handing(错误处理)

componentDidCatch(error,info)

任意一处的javascript报错会触发

参考

React.Component – React

reactjs.org
图标
组件的基本写法
import React, { Component } from 'react'

export default class NewReactComponent extends Component {
    constructor(props) {
        super(props)
        // getDefaultProps:接收初始props
        // getInitialState:初始化state
    }
    state = {

    }
    static getDerivedStateFromProps(props, state) { // 组件每次被rerender的时候,包括在组件构建之后(虚拟dom之后,实际dom挂载之前),每次获取新的props或state之后;;每次接收新的props之后都会返回一个对象作为新的state,返回null则说明不需要更新state
        return state
    }
    componentDidCatch(error, info) { // 获取到javascript错误

    }
    render() {
        return (
            <h2>New React.Component</h2>
        )
    }
    componentDidMount() { // 挂载后
        
    }   
    shouldComponentUpdate(nextProps, nextState) { // 组件Props或者state改变时触发,true:更新,false:不更新
        return true
    }
    getSnapshotBeforeUpdate(prevProps, prevState) { // 组件更新前触发

    }
    componentDidUpdate() { // 组件更新后触发

    }
    componentWillUnmount() { // 组件卸载时触发

    }
}