在具有许多组件的项目中,在销毁时释放组件所占用的资源非常重要,
在 react 中每一个组件 Component 都有自己独立的状态,互相不受影响
在浏览器中的状态有三种:Mounting(挂载)、Update(更新)、Unmounted(卸载)
graph LR
A(state or props changed) -.-> B(diff)
B -.-> C(render)
C -.->D(update)
D --> A
D --> E(Unmounted)
F(Mounted)-->D
class SinglePlayer extends React.Component {
//父组件没有传值,定义一个默认的
static defaultProps = {
app: 'weishi',
siz: 100
}
constructor(){
super()
this.state={}
}
//渲染函数
render(){
return (
<div className="opentest">opentest</div>
)
}
componentWillMount(){}//即将渲染
componentDidMount(){}//组件渲染完成
componentWillReceiveProps(nextProps){}//props值更新调用
shouldComponentUpdate(nextProps,nextState){//组件优化
//对比前后props和state
if ( nextProps.data == this.props.data ) {
return false;
}
return true;
}
componentWillUpdate(){}//组件更新之前
componentDidUpdate(){}//组件更新之后
componentWillUnmount(){}//组件即将销毁
}
总结:
react 钩子函数执行顺序
graph TD
subgraph .
A(constructor 初始化state和props) -.即将渲染.-> B(componentWillMount)
B -.渲染更新.-> C(render)
C -.dom更新之后的操作.->D(componentDidMount)
end
subgraph .
D -.没接收到新的props.->F(shouldComponentUpdate)
D -.接收新的props.->E(componentWillReceiveProps)
E -.组件优化,返回boolean值.->F
F -.true 组件即将更新.->G(componentWillUpdate)
F -.false.->J(componentWillUnmount)
G -.更新.-> H(render)
H -.组件更新之后.-> I(componentDidUpdate)
end
I -.组件卸载.-> J(componentWillUnmount)
熟悉 react 生命周期流程,开发 react 应用渲染页面会更加的得心应手
参考文章