生命周期
类组件的执行初次,会实例化类组件 ,将方法与属性进行实例化处理,首次渲染进入挂载的周期运算,更新的时候进入更新的生命周期运算 但是不会再生成新的实例对象 视图的改变不是依靠重新渲染组件 而是依靠 生命周期函数 重新调用render函数更新视图
//+++++++ 挂载阶段 ++++++++
-
getDefaultProps
-
getInitialState 前面两个都是在类实例化时,在constructor中执行
-
componentWillMount DOM渲染前 ⚠️
-
getDerivedStateFromProps 获取父节点的props和自身的state
-
render 渲染视图 生成DOM class组件中唯一必须实现的方法。 当render被调用时,他会检查this.props.和this.state的变化并返回以下类型之一:
通过jsx创建的react元素 数组或者fragments:使得render可以返回多个元素 Portals:可以渲染子节点到不同的dom树上 字符串或数值类型:他们在dom中会被渲染为文本节点 布尔类型或者null:什么都不渲染 注意 render函数是纯函数,这意味着在不修改组件state的情况下,每次调用都应该返回相同的结果,并且它不会直接和浏览器交互,如果需要和浏览器交互需要在componentDidMunt函数中或者其他生命周期函数中执行操作。 更新过程如果 shouldComponentUpdate() 返回 false,则不会调用 render()。
-
componentDidMound DOM挂载到根节点
//+++++++ 更新阶段 ++++++++
-
getDerivedStateFromProps 引发视图更新
-
三种方式
- props改变 会进入componentWillReceiveProps(nextProps)⚠️ 新的修改成了getDerivedStateFromProps(nextProps, prevState)
- 调用setsSate 会触发getDerivedStateFromProps
- 调用this.forceUpdate 会触发getDerivedStateFromProps 再到render函数 跳过了shouldComponentUpdate
-
-
shouldComponentUpdate(nextProps,nextState) 视图更新前 返回ture会进行下一步 会接收 props与state的新旧值并进行操作 返回false停止更新
-
componentWillUpdate(nextProps,nextState) 视图更新前 ⚠️
-
render 重新渲染视图 class组件中唯一必须实现的方法。
-
getSnapshotBeforeUpdate(prevProps,prevState)在最后一次渲染(提交到dom节点)之前调用,替换componentWillUpdate 它能在组件更改之前获取dom的节点信息(滚动位置),该方法所有返回值都会作为参数传给componentDidUpdate
-
componentDidUpdate(prevProps,prevState,snapshot) 视图更新后
//+++++++ 卸载阶段 ++++++++
- componentWillUnMount 组件卸载前