欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 房产 > 家装 > Vue3中setup运行时机介绍

Vue3中setup运行时机介绍

2025/5/17 23:18:01 来源:https://blog.csdn.net/yuren_xia/article/details/148017516  浏览:    关键词: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

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词