222 字
1 分钟
使用useEffect模拟一些常用的生命周期钩子
一、模拟 componentDidMount
这个副作用仅在组件第一次挂载的时候执行一次
useEffect(() => {
// do something ...
}, []);
二、模拟componentDidUpdate
这个副作用仅在组件更新后执行
useEffect(() => {
// do something ...
});
注意,这种写法谨慎使用,以确保你的代码按照你的预期执行。 下面是一种错误的用法,会令程序陷入死循环:boom::
useEffect(() => {
fetch("https://api.test.com/list")
.then((res) => res.json())
.then((data) => setList(data));
});
// 1.由于每次更新后都会执行副作用函数,发起请求,更新list
// 2.由于list更新 => 视图更新 => 再次触发重新发起请求... => 陷入死循环
三、模拟 componentWillUnmount
useEffect(() => {
// do something 比如注册一个定时器
const timerId = window.setInterval(() => {
console.log("test");
}, 1000);
// 返回一个函数,模拟 componentWillUnmount
return () => {
// 组件销毁时清除定时器
window.clearInterval(timerId);
};
}, []);
使用useEffect模拟一些常用的生命周期钩子
https://blog.oceanh.top/posts/frontend/useeffect模拟生命周期hooks/