求star

开源不易,喜欢请点个star吧

Ocean Han
222 字
1 分钟
使用useEffect模拟一些常用的生命周期钩子
2023-11-02

一、模拟 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/
作者
Ocean Han
发布于
2023-11-02
许可协议
CC BY-NC-SA 4.0
最后修改时间
2024-08-10 10:08:49