跳到主要内容

组件生命周期方法

分类HooksClasses
挂载useState() v16.8constructor(props) v0.13
\--componentWillMount() v0.13
UNSAFE_componentWillMount() v16.3
\-useState(stateFromPropsFn)static getDerivedStateFromProps(props, state) v16.3
\-return ()render() v0.13
\-useEffect(()=>{},[]) v16.8componentDidMount() v0.13
更新-componentWillReceiveProps(nextProps) v0.13
UNSAFE_componentWillReceiveProps(nextProps, nextContext) v16.3
static getDerivedStateFromProps(props, state) v16.3
\-useMemo(()=>,['']) v16.8shouldComponentUpdate(nextProps, nextState, nextContext) v0.13
\--componentWillUpdate(nextProps, nextState) v0.13
UNSAFE_componentWillUpdate(nextProps, nextState) v16.3
\--render()
\-useLayoutEffect(setup, dependencies?) v16.8getSnapshotBeforeUpdate(prevProps, prevState) v16.3
\-useEffect(()=>{}, [''])componentDidUpdate(prevProps, prevState, snapshot?) v0.13
卸载useEffect(()=>{return ()=>{}}, [])componentWillUnmount() v0.13
错误边界react-error-boundarystatic getDerivedStateFromError(error) v16.6
\--componentDidCatch(error, info) v16.0

大纲

  • 生命周期钩子函数
    • 调用顺序
      • 嵌套组件生命周期调用顺序
  • 生命周期图示

生命周期钩子函数

import { useState, useEffect, useMemo } from 'react';

export default function App() {
// 类似 constructor()
// const [state, setState] = useState(0);

// 类似 static getDerivedStateFromProps()
const stateFromPropsFn = () => {
return 0;
};
const [state, setState] = useState(stateFromPropsFn);

// 类似 componentDidMount()
useEffect(() => {
console.log('初始化调用一次');

// 类似 componentWillUnmount()
return () => {
console.log('组件卸载时调用');
}
}, [])

// 类似 shouldComponentUpdate()
const newState = useMemo(() => {}, [state])

// 类似 getSnapshotBeforeUpdate()
useLayoutEffect(() => {
console.log('在浏览器重新绘制屏幕之前触发');
}, [])

// 类似 componentDidUpdate()
useEffect(() => {
console.log('依赖值变更重新渲染');
}, [state])

const handleClick = () => {
setState(state+1);
}

// 类似 render()
return (
<div>
<div>{ state }</div>
<button type="button" onClick={handleClick}>Update</button>
</div>
);
}

调用顺序

挂载/更新/卸载:从内向外 依次执行

生命周期图示

Image

参考