Vue3中setup运行时机介绍

在 Vue3 中,直接写在 <script setup>...</script> 中的代码运行时机可以分为以下几个关键阶段:


一、执行顺序层级

Vue ScriptSetup Lifecycle 解析 <script setup> 注册响应式变量/组合函数 触发 beforeCreate 执行模板编译 触发 created 执行 mounted Vue ScriptSetup Lifecycle

二、具体运行阶段

1. 组件实例初始化前
  • 执行时机:在 Vue 实例化过程中,早于 beforeCreate 生命周期钩子
  • 典型行为
    <script setup>
    // 以下代码会先于 beforeCreate 执行
    import { ref } from 'vue'
    const count = ref(0) // 响应式变量初始化
    console.log('ScriptSetup 执行') // 会在此阶段输出
    </script>
    
2. 响应式系统构建
  • 依赖收集:所有在 <script setup> 中声明的 ref/reactive 变量会被立即初始化
  • 示例验证
    <script setup>
    const message = ref('Hello')
    console.log(message.value) // 输出 "Hello"
    </script>
    
3. 生命周期钩子对比
代码位置执行时机示例
<script setup>beforeCreate 之前初始化响应式变量、导入模块
setup() 函数beforeCreate 之前(等同于 <script setup>
onMounted 钩子组件挂载完成后访问 DOM 元素
created 钩子beforeCreate 之后不能访问 DOM

三、异步操作的特殊处理

1. 异步代码执行时机
<script setup>
// 以下异步代码会立即执行(在实例化前)
const fetchData = async () => {const res = await fetch('/api/data')data.value = await res.json()
}
fetchData() // 立即发起请求
</script>
2. 与生命周期的关系
  • 请求会在 beforeCreate 前发起,但响应处理会在组件挂载后完成
  • 典型场景
    <script setup>
    import { ref, onMounted } from 'vue'const data = ref(null)// 立即执行的异步请求
    fetchData().then(res => {data.value = res // 在 mounted 钩子前可能已赋值
    })onMounted(() => {console.log(data.value) // 可能已有值(取决于请求速度)
    })
    </script>
    

四、与选项式 API 的对比

特性<script setup>选项式 API (setup() 函数)
执行时机beforeCreatebeforeCreate
响应式声明ref/reactive 直接声明需要返回对象
代码组织更简洁,无 this 上下文需要 this 访问实例
编译优化Tree-shaking 友好需要手动优化

五、关键注意事项

1. 不要访问 DOM
<script setup>
// ❌ 错误:此时 DOM 尚未创建
const element = document.getElementById('app')
</script>
2. 异步数据获取
<script setup>
// ✅ 正确:在 setup 阶段发起请求
const data = ref(null)fetch('/api/data').then(res => {data.value = res.json()
})
</script>
3. 响应式变量初始化
<script setup>
// ✅ 正确:响应式变量在实例化前初始化
const count = ref(0)
</script>

六、底层原理

  1. 编译阶段

    • Vue 编译器将 <script setup> 转换为 setup() 函数
    • 所有顶层代码被提升到 setup() 最顶部
  2. 运行时阶段

    • 在组件实例化流程中,先执行 <script setup> 代码
    • 再依次触发 beforeCreatecreatedbeforeMount 等生命周期

总结

  • 运行时机<script setup> 中的代码在 组件实例化前 执行(早于 beforeCreate
  • 核心特性
    • 响应式变量立即初始化
    • 顶级代码立即执行
    • 无法访问 DOM 元素
  • 最佳实践
    • 用于初始化数据、导入模块、注册组合函数
    • 异步操作需注意执行顺序
    • 避免在此阶段直接操作 DOM

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/80126.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Ubuntu快速安装Python3.11及多版本管理

之前文章和大家分享过&#xff0c;将会出一篇专栏&#xff08;从电脑装ubuntu系统&#xff0c;到安装ubuntu的常用基础软件&#xff1a;jdk、python、node、nginx、maven、supervisor、minio、docker、git、mysql、redis、postgresql、mq、ollama等&#xff09;&#xff0c;目前…

裸金属服务器和云服务器之间的差别

裸金属服务器能够直接在硬件上运行&#xff0c;不需要额外的虚化层&#xff0c;让每个应用程序或者是服务都能够在实际的硬件上运行&#xff0c;不需要和其他虚拟服务器来共享资源&#xff1b;而云服务器作为一种虚拟服务器&#xff0c;是通过虚拟化技术为企业提供一个独立的计…

C++ 中的几种锁机制整理

1. 互斥锁&#xff08;std::mutex&#xff09; ✅ 简介 最常用的线程同步工具。保证同一时间只能有一个线程访问临界区。 ✅ 使用方式 #include <mutex>std::mutex mtx;void safeFunction() {std::lock_guard<std::mutex> lock(mtx);// 临界区代码 }✅ 优点 简…

Graph Representation Learning【图最短路径优化/Node2vec/Deepwalk】

文章目录 Q1&#xff1a;网络性质&#xff1a;1.数据读取与邻接表构建&#xff1a;2.基本特征和连通性&#xff1a; 算法思路&#xff1a;1. 广度优先搜索&#xff08;BFS&#xff09;标记前驱:2. 回溯生成所有最短路径: 实验结果&#xff1a;复杂度分析&#xff1a; Q2&#x…

MATLAB中的概率分布生成:从理论到实践

MATLAB中的概率分布生成&#xff1a;从理论到实践 引言 MATLAB作为一款强大的科学计算软件&#xff0c;在统计分析、数据模拟和概率建模方面提供了丰富的功能。本文将介绍如何使用MATLAB生成各种常见的概率分布&#xff0c;包括均匀分布、正态分布、泊松分布等&#xff0c;并…

经典算法 (A/B) mod C

(A/B) mod C 问题描述 求(A/B)%C&#xff0c;但由于A和B实在太大了&#xff0c;我们只给出A % C&#xff0c;B % C。 (我们保证给定的A必能被B整除&#xff0c;且gcd(B,C) 1)。 输入描述 输入一行三个整数&#xff0c;分别是A % C&#xff0c;B % C&#xff0c;C。 输出…

大数据技术的主要方向及其应用详解

文章目录 一、大数据技术概述二、大数据存储与管理方向1. 分布式文件系统2. NoSQL数据库3. 数据仓库技术 三、大数据处理与分析方向1. 批处理技术2. 流处理技术3. 交互式分析4. 图计算技术 四、大数据机器学习方向1. 分布式机器学习2. 深度学习平台3. 自动机器学习(AutoML) 五、…

Deeper and Wider Siamese Networks for Real-Time Visual Tracking

现象&#xff1a; the backbone networks used in Siamese trackers are relatively shallow, such as AlexNet , which does not fully take advantage of the capability of modern deep neural networks. direct replacement of backbones with existing powerful archite…

ubuntu22.04卸载vscode

方法 1&#xff1a;通过 Snap 卸载 VSCode 如果你是通过 Snap 安装的 VSCode&#xff08;Ubuntu 22.04 默认推荐方式&#xff09;&#xff0c;按照以下步骤卸载&#xff1a; 检查是否通过 Snap 安装&#xff1a; bash snap list | grep code如果输出显示 code&#xff0c;说明…

OpenCV 背景建模详解:从原理到实战

在计算机视觉领域&#xff0c;背景建模是一项基础且重要的技术&#xff0c;它能够从视频流中分离出前景目标&#xff0c;广泛应用于运动目标检测、视频监控、人机交互等场景。OpenCV 作为计算机视觉领域最受欢迎的开源库之一&#xff0c;提供了多种高效的背景建模算法。本文将深…

Android native崩溃问题分析

最近在做NDK项目的时候&#xff0c;出现了启动应用就崩溃了&#xff0c;崩溃日志如下&#xff1a; 10:41:04.743 A Build fingerprint: samsung/g0qzcx/g0q:13/TP1A.220624.014/S9060ZCU4CWH1:user/release-keys 10:41:04.743 A Revision: 12 10:41:04.743 A ABI: arm64…

【Shell的基本操作】

文章目录 一、实验目的二、实验环境三、实验内容3.1 Shell变量与脚本基础3.2 定制终端提示符&#xff08;PS1变量&#xff09;3.3 文件查找与类型确认&#xff08;find命令&#xff09;3.4 管道命令实战&#xff08;用户登录统计&#xff09;3.5 交互式备份压缩脚本 四、总结4.…

快速选择算法:优化大数据中的 Top-K 问题

在处理海量数据时&#xff0c;经常会遇到这样的需求&#xff1a;找出数据中最大的前 K 个数&#xff0c;而不必对整个数据集进行排序。这种场景下&#xff0c;快速选择算法&#xff08;Quickselect&#xff09;就成了一个非常高效的解决方案。本文将通过一个 C 实现的快速选择算…

AQS 基本思想与源码分析

充分了解 AbstractQueuedSynchronizer 对于深入理解并发编程是有益处的&#xff0c;它是用来构建锁或者其他同步组件的基础框架&#xff0c;我们常用的同步工具类如 CountDownLatch、Semaphore、ThreadPoolExecutor、ReentrantLock 和 ReentrantReadWriteLock 内部都用到了它。…

理解位图算法:使用 C++ 实现高效数据查重

在处理海量数据时&#xff0c;我们常常需要检查某个元素是否已经存在于集合中。传统的方法如哈希表或集合容器虽然有效&#xff0c;但在数据量极大的情况下会占用大量内存。这时&#xff0c;位图算法 (Bitmap) 就成为了一种非常高效的解决方案。本文将通过分析一段使用位图算法…

数学复习笔记 12

前言 现在做一下例题和练习题。矩阵的秩和线性相关。另外还要复盘前面高数的部分的内容。奥&#xff0c;之前矩阵的例题和练习题&#xff0c;也没有做完&#xff0c;行列式的例题和练习题也没有做完。累加起来了。以后还是得学一个知识点就做一个部分的内容&#xff0c;日拱一…

1-10 目录树

在ZIP归档文件中&#xff0c;保留着所有压缩文件和目录的相对路径和名称。当使用WinZIP等GUI软件打开ZIP归档文件时&#xff0c;可以从这些信息中重建目录的树状结构。请编写程序实现目录的树状结构的重建工作。 输入格式: 输入首先给出正整数N&#xff08;≤104&#xff09;…

Python爬虫实战:研究 RPC 远程调用机制,实现逆向解密

1. 引言 在网络爬虫技术的实际应用中,目标网站通常采用各种加密手段保护其数据传输和业务逻辑。这些加密机制给爬虫开发带来了巨大挑战,传统的爬虫技术往往难以应对复杂的加密算法。逆向解密作为一种应对策略,旨在通过分析和破解目标网站的加密机制,获取原始数据。 然而,…

debugfs:Linux 内核调试的利器

目录 一、什么是 debugfs&#xff1f;二、debugfs 的配置和启用方式2.1 内核配置选项2.2 挂载 debugfs2.3 Android 系统中的 debugfs 三、debugfs 的典型应用场景3.1 调试驱动开发3.2 内核子系统调试3.3 性能分析 四、常见 debugfs 子目录与功能示例4.1 /sys/kernel/debug/trac…

lua 作为嵌入式设备的配置语言

从lua的脚本中获取数据 lua中栈的索引 3 | -1 2 | -2 1 | -3 可以在lua的解释器中加入自己自定的一些功能,其实没啥必要,就是为了可以练习下lua