详解 useEffect return 内外的代码执行顺序

参考代码

jsx 复制代码
    import React, { useEffect, useState } from 'react'
    import { Link } from 'react-router-dom'

    function Demo() {
      const [count, setCount] = useState(0)

      useEffect(() => {
        console.log('无依赖---------------------------', count)
        return () => {
          console.log('执行  无依赖  时的return的函数')
        }
      })
      useEffect(() => {
        console.log('依赖为[]------------------------', count)
        return () => {
          console.log('执行 依赖为[]  时的return的函数')
        }
      }, [])
      useEffect(() => {
        console.log('依赖为[count]------------------------', count)
        return () => {
          console.log('执行 依赖为[count]  时的return的函数')
        }
      }, [count])
      return (
        <div>
          <p>count的值为: {count} </p>
          <button onClick={() => setCount(count + 1)}>add</button>

          <Link to="/management">About</Link>
        </div>
      )
    }

初次加载页面结果如下

可以看到首次组件加载时,return 都没有执行

修改依赖项之后

修改依赖项会先执行无依赖和依赖的 return,再执行 return 之外的,没有执行依赖项为空数组的情况。

跳转路由之后

可以看到路由跳转时,三种情况的 return 都执行了

总结

  1. 当 useEffect 被再次执行时会先清理副作用执行 return,再执行 return 之外的,可以理解为只要 useEffect 被再次执行,都会执行 return
  2. 当组件销毁时,不管是否有依赖项,useEffect 的 return 都会被执行去清理副作用
    react版本: "^18.2.0"

代码参考:useEffect有依赖项和没有依赖项时return内外的代码执行顺序_useeffect return-CSDN博客

相关推荐
LeQi1 分钟前
当!important成为代码毒瘤:你的项目是不是也中了招?
前端·css·程序员
玲小珑2 分钟前
Next.js 教程系列(九)增量静态再生 (ISR):动态更新的静态内容
前端·next.js
Mintopia11 分钟前
B 样条曲线:计算机图形学里的 “曲线魔术师”
前端·javascript·计算机图形学
前端小巷子14 分钟前
跨域问题解决方案:CORS(跨域资源共享)
前端·网络协议·面试
大大。15 分钟前
van-tabbar-item选中active数据变了,图标没变
java·服务器·前端
Mintopia17 分钟前
Three.js 3D 世界中的噪声运动:当数学与像素共舞
前端·javascript·three.js
nc_kai17 分钟前
Flutter 之 每日翻译 PreferredSizeWidget
java·前端·flutter
来碗疙瘩汤20 分钟前
使用 Three.js 与 CSS3DRenderer 在 Vue3 中加载网页为 3D 模型
前端·javascript
满分观察网友z22 分钟前
富文本解析终极指南:从Quill到小程序,我如何用正则摆平所有坑?
前端
打野赵怀真22 分钟前
在TypeScript中装饰器有哪些应用场景?
前端·javascript