生命周期
react组件的生命周期可以分为三个阶段:
1. 挂载阶段: 组件被创建并插入到DOM中,此时组件的状态是未知的,组件的属性和状态都可以被设置。 2. 更新阶段: 组件的状态发生变化,组件需要重新渲染,此时组件的属性和状态都可以被更新。 3. 卸载阶段: 组件从DOM中移除,此时组件的状态也会被销毁。
constructor(props)
挂载时独有的初始化方法,在这个方法中,可以对组件的状态进行初始化。
render()
一个很重要的生命周期,它返回一个React元素,描述了组件在屏幕上应该呈现的内容。
传入props,setState()
,forceUpdate()
等方法可以触发更新。
shouldComponentUpdate()
一个函数,在组件接收到新的props或state时,会调用这个函数,用来判断是否需要更新组件。通常在render之前
React update DOM and refs
当组件的状态发生变化时,会调用render方法重新渲染组件,然后React更新DOM并更新组件的refs。
example
import './App.css';
import React from 'react';
class App extends React.PureComponent {
constructor(props) {
super(props);
this.state = {
mes: 'hello'
}
}
static getDerivedStateFromProps() {
console.log('getDerivedStateFromProps');
return null;
}
render() {
console.log('render');
return <div className="App">
</div>
}
componentDidMount() {
console.log('componentDidMount');
}
}
export default App;
严格模式
严格模式只在开发模式下生效,生产上线时会去除,作用简要概括有两方面的作用
- 检测一些危险的操作(比如直接修改this.state,使用废弃的api等)
- 会把一些生命周期执行两次,来检测额外副作用(比如render)
重点生命周期
render: 通过render函数的执行来决定组件渲染什么内容,所以无论更新还是初次挂载否必须执行render
componenDidMount: 组件挂载完成后触发,一般在这里做一些异步请求,获取数据,初始化组件的状态等操作
shouldComponentUpdate: 组件是否需要更新,如果返回false,则不会触发render函数,如果返回true,则会触发render函数,一般用来做性能优化
componentDidUpdate: 组件更新完成后触发,一般在这里做一些异步请求,获取数据,初始化组件的状态等操作
componentWillUnmount: 组件卸载前触发,一般在这里做一些清理工作,比如清除定时器,取消网络请求等