详解 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博客

相关推荐
小莫分享12 小时前
Github Action 一键部署HTML 静态服务
前端·html·github
p***434812 小时前
JavaScript数据分析实战
开发语言·javascript·ecmascript
星释12 小时前
Rust 练习册 66:密码方块与文本加密
java·前端·rust
IT_陈寒13 小时前
React性能翻倍!90%开发者忽略的5个Hooks最佳实践
前端·人工智能·后端
亿元程序员13 小时前
光图片就300多M,微信小游戏给再大的分包也难啊!
前端
中工钱袋13 小时前
前端请求到底是从哪里发出去的?
前端
じòぴé南冸じょうげん16 小时前
若依框架favicon.ico缓存更新问题解决方案:本地生效但线上未更新
前端·javascript·前端框架·html
狮子座的男孩16 小时前
js基础高级:01、数据类型(typeof、instanceof、===的使用)、数据与变量与内存(定义、赋值与内存关系、引用变量赋值、js调函数传参)
前端·javascript·经验分享·数据类型·数据与变量与内存·赋值与内存关系·引用变量赋值
Cyclo-19 小时前
PDFJS 在React中的引入 使用组件打开文件流PDF
前端·react.js·pdf
椒盐螺丝钉21 小时前
Vue Router应用:组件跳转
前端·javascript·vue.js