useEffect用法总结

1. 模拟生命周期

1.1 仅初始化执行,模拟 componentDidMount

依赖空数组,由于依赖为空,不会变化,只执行一次
 
useEffect(() => {
    console.log('hello world')
}, [])
1.2 仅更新执行,模拟 componentDidUpdate

依赖为具体变量,每次变量变化,都执行一次
useEffect(() => {
    console.log('info: ', name, age)
}, [name, age])
1.3 初始化和更新都执行,模拟 componentDidMount 和 componentDidUpdate

没有依赖,与依赖为空不同,这个每次都会执行
useEffect(() => {
    console.log('every time')
})
1.4 卸载执行,模拟 componentWillUnmount

在useEffect中返回一个函数,则在组件卸载时,会执行改函数
 useEffect(() => {
    const id = setInterval(() => {
      setCount(c => c + 1);
    }, 1000);
    return () => clearInterval(id);
}, []);
2. 执行async函数

useEffect的回调函数,不能是async,可以将async写在回调里面,单独调用
复制代码
//不可以
useEffect(async()=>{
    const res = await fetchData(id)
    setData(res.data)
},[id])


//推荐
useEffect(()=>{
    const getData = async() => {
        const res = await fetchData(id)
        setData(res.data)
    }
    getData()
},[id])
复制代码
3. useEffect执行顺序

useEffect的执行时机,是在react的commit阶段之后。

当父子组件都有useEffect,则先执行子组件的useEffect,再执行父组件的useEffect
posted @   全玉  阅读(2327)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
历史上的今天:
2020-04-25 前端鉴权的几种方式
2020-04-25 TLS/SSL握手过程
点击右上角即可分享
微信分享提示