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

相关推荐
_AaronWong10 小时前
实现一个鼠标滚轮横向滚动需求
前端·electron
小帆聊前端10 小时前
JS 原型链深度解读:从混乱到通透,掌握 90% 前端面试核心
javascript
子兮曰10 小时前
浏览器与 Node.js 全局变量体系详解:从 window 到 global 的核心差异
前端·javascript·node.js
Olrookie10 小时前
ruoyi-vue(十五)——布局设置,导航栏,侧边栏,顶部栏
前端·vue.js·笔记
召摇10 小时前
API 设计最佳实践 Javascript 篇
前端·javascript·vue.js
光影少年10 小时前
vite打包优化有哪些
前端·vite·掘金·金石计划
码间舞10 小时前
文件太大怎么上传?【分组分片上传大文件】-实战记录
前端·vue.js·程序员
bug_kada11 小时前
前端性能优化之图片预加载
前端·性能优化
北漂大橙子11 小时前
运营妹子复制 200 个 URL 手酸到哭,我用 Puppeteer 写了个工具,1 小时搞定!
前端·puppeteer
小桥风满袖11 小时前
极简三分钟ES6 - ES9中Promise扩展
前端·javascript