React useComponentDidUpdate钩子
在组件更新后立即执行回调函数。
- 使用
useRef()
钩子创建一个变量mounted
,用于跟踪组件是否已挂载。 - 使用
useEffect()
钩子,在第一次执行钩子时将mounted
的值设置为true
。 - 在后续的钩子执行中运行提供的
callback
。 - 为第二个参数
condition
提供一个依赖数组,只有当依赖项发生变化时才会执行钩子。 - 行为类似于类组件的
componentDidUpdate()
生命周期方法。
const useComponentDidUpdate = (callback, condition) => {
const mounted = React.useRef(false);
React.useEffect(() => {
if (mounted.current) callback();
else mounted.current = true;
}, condition);
};
const App = () => {
const [value, setValue] = React.useState(0);
const [otherValue, setOtherValue] = React.useState(1);
useComponentDidUpdate(() => {
console.log(`当前值为 ${value}。`);
}, [value]);
return (
<>
<p>
值: {value},其他值: {otherValue}
</p>
<button onClick={() => setValue(value + 1)}>增加值</button>
<button onClick={() => setOtherValue(otherValue + 1)}>
增加其他值
</button>
</>
);
};
ReactDOM.createRoot(document.getElementById('root')).render(
<App />
);