在使用类组件开发时,我们可以在生命周期方法中执行一些业务逻辑。拿生命周期又有哪些阶段呢?
挂载阶段:当组件实例被创建并插入DOM中时
- constructor()
- static getDerivedStateFromProps()
- render()
- componentDidMount()
更新阶段:当组件的props或state发生变化时会触发更新
- static getDerivedStateFromProps()
- shouldComponentUpdate()
- render()
- getSnapshotBeforeUpdate()
- componentDidUpdate()
卸载阶段:当组件从DOM中移除时
- componentWillUnmount()
下图清楚地展示了生命周期过程
React生命周期说明
| 方法 | 是否必须 | 说明 |
|---|---|---|
| render() | true | render()方法是class组件中唯一必须实现的方法,调用此方法才能把JSX内容渲染到页面上 |
| constructor() | false | constructor(props),可以在构造函数里面初始化state或进行方法绑定 |
| componentDidMount() | false | 会在组件挂载后(插入DOM树中)立即调用,可以在里面发送http请求、设置定时器等操作 |
| componentDidUpdate() | false | componentDidUpdate(prevProps,prevState,snapshot),会在更新后被立即调用,但是首次渲染不会执行此方法。注意:在此方法里面调用setState,应该避免出现死循环,可以在条件语句里面更新state |
| componentWillUnmount() | false | 会在组件卸载及销毁之前直接调用,可以在里面清除定时器、取消对象地引用等操作。注意:应避免调用setState() |
| shouldComponentUpdate | false | shouldComponentUpdate(nextProps,nextState),根据nextProps和nextState这两个参数来判断当前组件是否可以更新 |
| static getDerivedStateFromProps() | false | static getDerivedStateFromProps(props,state)会在调用render方法之前调用,并在初始挂载及后续更新时都会被调用。它应该返回一个对象来更新state,如果返回null则不更新任何内容 |
| getSnapshotBeforeUpdate() | false | getSnapshotBeforeUpdate(prevProps,prevState),在最近一次渲染输出(提交到DOM节点)之前调用。它使得组件能在发生更改之前从DOM中捕获一些信息(例如,滚动位置)。此生命周期得任何返回值将作为参数传递给componentDidUpdate() |
| static getDerivedStateFromError() | false | static getDerivedStateFromError(error),会在后代组件抛出错误后被调用,一般用于错误捕获 |
| componentDidCatch() | false | componentDidCatch(error,info),会在后代组件抛出错误后被调用,一般用于错误捕获 |
过期的生命周期方法
| 方法 | 是否必须 | 说明 |
|---|---|---|
| UNSAFE_componentWillMount() | false | 该方法在render()之前调用,之前名为componentWillMount。该名称将继续使用至React 17 |
| UNSAFE_componentWillReceiveProps() | false | 父组件重新渲染时候会调用此方法。之前名为componentWillReceiveProps。该名称将继续使用至React 17 |
| UNSAFE_componentWillUpdate() | false | 当组件收到新的props或state时,会在渲染之前调用此方法,之前名为componentWillUpdate。该名称将继续使用至React 17 |
记录记录!