Vue3-生命周期

生命周期钩子

onMounted 钩子可以用来在组件完成初始渲染并创建 DOM 节点后运行代码

js 复制代码
<script setup>
import { onMounted } from 'vue'

onMounted(() => {
  console.log(`the component is now mounted.`)
})
</script>

还有一些钩子,会在实例生命周期的不同阶段被调用,最常用的是onMounted、onUpdated 和 onUnmounted

当调用onMounted时,Vue会自动将回调函数注册到当前正被初始化的组件实例上。这意味着这些钩子应当在初始化时被同步注册。

js 复制代码
setTimeout(() => {
  onMounted(() => {
    // 异步注册时当前组件实例已丢失
    // 这将不会正常工作
  })
}, 100)

onMounted()不一定要直接写在setup()里面,但一定要在setup()执行期间被调用

直接写在setup()里面:

js 复制代码
<script setup>
import { onMounted } from 'vue'

onMounted(() => {
  console.log('mounted')
})
</script>

setup() 的词法上下文中:

js 复制代码
// useLog.js
import { onMounted } from 'vue'

export function useLog() {
  onMounted(() => {
    console.log('mounted')
  })
}
js 复制代码
<script setup>  
import { useLog } from './useLog'  
  
useLog()  
</script>

这样的执行过程是:

scss 复制代码
setup()  
│  
▼  
useLog()  
│  
▼  
onMounted()

OnMounted也不可以通过延时函数异步执行,当setup已经执行完的时候,vue就不知道onMounted究竟属于哪个组件了

对于文档调用栈来说,只要是:

scss 复制代码
setup()  
│  
▼  
A()  
│  
▼  
B()  
│  
▼  
C()  
│  
▼  
onMounted()

而没有:

  • setTimeout

  • Promise.then

  • await

  • setInterval

这种中断,vue都认为是延时函数

setup与onMounted

setup

setup() : 组件开始工作的入口。当<User>创建后,就会执行setup() -> 生成响应式数据 -> 生成模板 -> 渲染页面,所以setup是最早执行的,通常进行一些初始化工作,如:

  • ref()
  • reactive()
  • computed()
  • watch()
  • defineProps()
  • defineEmits()
  • 导入 composable(例如 useMouse()

注意<script setup> = setup(){}

onMounted

挂载完成生命周期,即组件已经真正出现在页面上了

例如:

js 复制代码
<template>  
<h1>Hello</h1>  
</template>

在浏览器最终变成:

js 复制代码
<h1>Hello</h1>

到了这一刻,里面的代码才会执行,这时才能:

  • 操作 DOM
  • 获取元素大小
  • 播放动画
  • 聚焦输入框

为什么需要onMounted

当如下情况发生时

js 复制代码
<template>
  <input ref="inputRef">
</template>

如果

js 复制代码
<script setup>
inputRef.value.focus()
</script>

就会报错,因为setup()时页面还没有创建,即input还不存在

生命周期图示

相关推荐
莪_幻尘2 小时前
你的 AI Skill 越多越蠢?Token 上下文爆炸的求生指南
前端·ai编程
lichenyang4532 小时前
从 has.echo 到异步 API 注册表:一次 ASCF API 回调不触发的排查复盘
前端
林瞅瞅2 小时前
Nuxt3 项目部署 Nginx 防盗链后特定 JS 文件 403 问题修复方案
前端
kyriewen3 小时前
别再每次都 Google 了:我整理了前端日常最常踩的 10 个 Git 坑,附速查表
前端·javascript·git
一颗奇趣蛋3 小时前
Web 视频开发完全指南:从入门到精通
前端
非洲农业不发达3 小时前
windows终端体验大升级,让你拥有macos级别的美化
前端·后端
妙码生花3 小时前
从 PHP 到 AI + Golang,程序员自救转型手记(十七):登录接口完善,登录页接口整合,解决跨域
前端·后端·ai编程
唐诗3 小时前
改 3 行配置,我的 Tauri dev 冷启动从 100 秒干到 4 秒
前端·客户端
SmartBoyW4 小时前
深入ECMAScript规范:彻底搞懂JS隐式类型转换与底层ToPrimitive机制
前端·javascript