当组件实例被创建并插入DOM树中,其生命周期调用顺序如下
constructor
static getDerivedStateFromProps
render
componentDidMount
如果不初始化State或者不进行方法绑定,则不需要为React组件实现构造函数
在React组件挂载之前,会调用它的构造函数,在为子类实现构造函数时,应该在其他语句之前调用super(props),否则this.props会出现未定义的bug
通常构造函数仅用于一下两种情况
为事件处理函数绑定实例
在constructor函数中不要调用setState方法,如果需要使用内部state,请直接在构造函数中为this.state赋值
会在调用render方法之前调用,并且在初始挂载及后续更新时都会被调用,它应该返回一个对象来更新state,如果返回null则不更新任何内容
render方法是class组件中唯一必须实现的方法,当render被调用时,他会检查props和state的变化并返回虚拟节点:
render函数应该为纯函数,也就是不修改state的情况下,每次调用都返回相同的结果,并且它不会直接与浏览器交互
这个会在组件挂载后立即调用
当组件的props或者state发生变化时会触发更新
static getDerivedStateFromProps
shouldComponentUpdate
render
getSnapshotBeforeUpdate
componentDidUpdate
当props或者state发生变化后,页面在渲染函数执行之前会调用这个生命周期,默认情况下,这个方法会返回true,让React执行更新。
如果我们的组件不依赖于state或props的改变,你可以让shouldComponentUpdate返回false来避免不必要的渲染
这个方法仅仅作为性能优化方式而存在的,不要企图依靠此方法来阻止渲染,因为这可能会产生bug,应该使用PureComponent组件而不是使用这个生命周期。
React.PureComponent是另一个可以用来优化性能的方法。PureComponent通过props和state的浅层对比来实现shouldComponentUpdate,这可以避免在props或state没有改变的情况下进行不必要的渲染。
它会在最近一次渲染之前调用,它使得组件能在发生改变之前从DOM中获取一些信息
更新之后立即调用,当组件更新之后,可以再次对DOM进行操作
当组件从DOM树中移除时会调用下面的方法
componentWillUnmount
会在组件卸载及销毁之前直接调用
渲染过程,生命周期或者子组件的构造函数中抛出错误时,会调用如下方法
static getDerivedStateFromError
componentDidCatch
次生命周期会在后代组件抛出错误后调用,他将抛出的错误作为参数,并返回一个值以更新state
它在后代组件抛出错误后被调用