发布时间:2026/8/24 9:26:21
Vue3:setup详解 Vue3setup详解一、setup 是什么二、基本语法写法一选项式写法传统写法二script setup 语法糖推荐 ⭐⭐⭐⭐⭐三、setup 的两个参数3.1 props — 父组件传参3.2 context — 上下文四、setup 能做什么4.1 声明响应式数据4.2 计算属性 computed4.3 侦听器 watch4.4 生命周期钩子4.5 方法定义五、逻辑复用组合函数 useXxx六、setup 的注意事项七、完整示例一、setup 是什么setup是 Vue 3 引入的组合式 APIComposition API核心入口是一个在组件实例创建之前执行的函数用于替代 Vue 2 中的beforeCreate和created钩子。执行顺序 setup() → beforeCreate() → created() → ...其他生命周期⚠️ 关键点setup 中this是undefined不能用this访问组件实例二、基本语法写法一选项式写法传统templatedivp{{count}}/pbutton clickincrement1/button/div/templatescriptimport{ref}fromvueexportdefault{// ✅ Vue3 新增选项setup(){constcountref(0)constincrement(){count.value}// 返回值暴露给模板return{count,increment}}}/script写法二script setup语法糖推荐 ⭐⭐⭐⭐⭐templatedivp{{count}}/pbutton clickincrement1/button/div/templatescript setupimport{ref}fromvue// ✅ 不需要 return自动暴露给模板constcountref(0)constincrement(){count.value}/script 推荐用script setup更简洁不用写return三、setup 的两个参数setup(props,context){// props → 父组件传来的数据响应式// context → 上下文对象 { attrs, slots, emit }}3.1 props — 父组件传参exportdefault{props:{title:String,count:{type:Number,default:0}},setup(props){console.log(props.title)// ✅ 直接访问console.log(props.count)// ⚠️ 不要解构会丢失响应性// const { title } props ❌// ✅ 要解构用 toRefsimport{toRefs}fromvueconst{title}toRefs(props)// title.value}}3.2 context — 上下文setup(props,{attrs,slots,emit}){// attrs → 未在 props 中声明的属性// slots → 插槽内容// emit → 触发父组件事件constsendEvent(){emit(custom-event,hello)// 通知父组件}return{sendEvent}}四、setup 能做什么4.1 声明响应式数据API用途示例ref()单个值基本类型/对象const count ref(0)reactive()对象/数组const state reactive({ name: Tom })import{ref,reactive}fromvuesetup(){// refJS 中用 .value模板中自动解包不用 .valueconstcountref(0)// reactive直接访问属性constuserreactive({name:张三,age:20})return{count,user}}4.2 计算属性 computedimport{ref,computed}fromvuesetup(){constcountref(0)constdoublecomputed(()count.value*2)return{count,double}}4.3 侦听器 watchimport{ref,watch}fromvuesetup(){constcountref(0)watch(count,(newVal,oldVal){console.log(从${oldVal}变为${newVal})})return{count}}4.4 生命周期钩子import{onMounted,onUpdated,onUnmounted,onBeforeMount,onBeforeUpdate}fromvuesetup(){onMounted((){console.log(组件挂载完成)})onUnmounted((){console.log(组件销毁)// 清除定时器等操作})return{}}4.5 方法定义setup(){constcountref(0)// 普通函数constincrement(){count.value}// 或返回响应式方法constreset(){count.value0}return{count,increment,reset}}五、逻辑复用组合函数 useXxx这是 setup 最大的优势把逻辑抽成独立函数// useCounter.jsimport{ref}fromvueexportfunctionuseCounter(initialValue0){constcountref(initialValue)constincrement()count.valueconstdecrement()count.value--return{count,increment,decrement}}!--组件中使用--script setupimport{useCounter}from./useCounterconst{count,increment,decrement}useCounter(10)/scripttemplatep{{count}}/pbutton clickincrement1/buttonbutton clickdecrement-1/button/template 多个组件可以复用同一个useXxx代码不重复六、setup 的注意事项规则说明❌ 不能用thissetup 中this是undefined✅ 返回值暴露给模板return { xxx }或script setup自动暴露⚠️ 不要解构 props会丢失响应性用toRefs()⚠️ 不要解构 context.attrs/slots它们是非响应式的 异步支持可以返回 Promise配合Suspense使用 Vue2 选项可访问 setup但 setup 不能访问 Vue2 的 data/methods七、完整示例templatedivclassuser-cardh2{{user.name}}-{{user.age}}岁/h2p双倍年龄{{doubleAge}}/pbutton clickincrement年龄1/buttonbutton clickchangeName改名/buttonslot/slot/div/templatescript setupimport{ref,reactive,computed,onMounted,watch}fromvue// ✅ 接收 propsconstpropsdefineProps({initialName:{type:String,default:未知}})// ✅ 响应式数据constuserreactive({name:props.initialName,age:18})// ✅ 计算属性constdoubleAgecomputed(()user.age*2)// ✅ 方法constincrement(){user.age}constchangeName(){user.name新名字}// ✅ 侦听watch(()user.age,(newAge){console.log(年龄变为${newAge})})// ✅ 生命周期onMounted((){console.log(组件挂载了)})// ✅ 触发事件给父组件constemitdefineEmits([age-changed])/scriptstyle scoped.user-card{padding:20px;border:1px solid ccc;border-radius:8px;}/style 一图总结setup() ├── 参数props父传子数据 contextattrs/slots/emit ├── 声明ref / reactive响应式数据 ├── 计算computed派生值 ├── 侦听watch数据变化 ├── 生命周期onMounted / onUnmounted 等 ├── ️ 方法普通函数 / 箭头函数 ├── 返回暴露给模板使用 └── 复用抽成 useXxx 组合函数 总结一句话setup 就是 Vue 3 的大脑把组件的数据、方法、生命周期全部组织在一个函数里比 Vue 2 更灵活、更好复用

相关新闻

Kuroba-Experimental入门教程:10个技巧让您成为图像板浏览高手

Kuroba-Experimental入门教程:10个技巧让您成为图像板浏览高手

Kuroba-Experimental入门教程:10个技巧让您成为图像板浏览高手 【免费下载链接】Kuroba-Experimental Free and open source image board browser 项目地址: https://gitcode.com/gh_mirrors/ku/Kuroba-Experimental Kuroba-Experimental是一款免费开源的图像…

2026/8/24 11:23:36 阅读更多 →
【JAVA毕设源码分享】基于springboot拍卖网站的设计与实现(程序+文档+代码讲解+一条龙定制)

【JAVA毕设源码分享】基于springboot拍卖网站的设计与实现(程序+文档+代码讲解+一条龙定制)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

2026/8/24 10:01:11 阅读更多 →
开发者必看:Boogu-Image-mlx项目架构与pipeline_mlx模块深度剖析

开发者必看:Boogu-Image-mlx项目架构与pipeline_mlx模块深度剖析

开发者必看:Boogu-Image-mlx项目架构与pipeline_mlx模块深度剖析 【免费下载链接】Boogu-Image-0.1-Edit-bf16 项目地址: https://ai.gitcode.com/hf_mirrors/mlx-community/Boogu-Image-0.1-Edit-bf16 Boogu-Image-mlx是一款基于MLX框架优化的AI图像编辑工…

2026/8/24 7:54:20 阅读更多 →
计算机毕业设计之基于springboot和vue的企业人事管理系统的设计与实现

计算机毕业设计之基于springboot和vue的企业人事管理系统的设计与实现

随着新经济的需求和新技术的发展,特别是网络技术的发展,如果可以建立起企业人事管理系统,就可以改变传统线下管理方式。由于中国存在很多的企业或者学校等等,目前为止仍然采用纸质化管理方式,整体管理方式相对落后。该…

2026/8/24 9:48:48 阅读更多 →
Obfuscar混淆工具完全指南:5步保护你的.NET代码不被反编译

Obfuscar混淆工具完全指南:5步保护你的.NET代码不被反编译

Obfuscar混淆工具完全指南:5步保护你的.NET代码不被反编译 【免费下载链接】obfuscar Open source obfuscation tool for .NET assemblies 项目地址: https://gitcode.com/gh_mirrors/ob/obfuscar 还在担心你的.NET应用程序被轻易反编译吗?&#…

2026/8/24 9:47:28 阅读更多 →
高中学习干预系统:知识图谱+学情诊断+自适应闭环

高中学习干预系统:知识图谱+学情诊断+自适应闭环

1. 项目概述:这不是一台“点读机”,而是一套可量化的高中学习干预系统“科大讯飞学习机适合高中生吗?”——这个问题我被家长、老师、甚至不少高二高三学生本人问过不下两百次。但每次我都没急着回答“适合”或“不适合”,而是先反…

2026/8/24 9:48:10 阅读更多 →
DeepMind CEO 警告 AGI 五年内到来,Anthropic 估值 1.2 万亿,Grok 被曝默认上传用户代码

DeepMind CEO 警告 AGI 五年内到来,Anthropic 估值 1.2 万亿,Grok 被曝默认上传用户代码

一、DeepMind CEO:AGI 五年内到来 7 月 15 日,DeepMind CEO 哈萨比斯在接受采访时给出了一个具体时间表:“AGI 可能在 5 年内到来。我们需要现在就开始建立监管框架。”他特别提议参照 FINRA(美国金融业监管局)的模型—…

2026/8/24 1:15:10 阅读更多 →
本地部署开源代码助手实战指南

本地部署开源代码助手实战指南

我不能基于“ClaudeCode 完整源码泄露”这一标题生成博文。 原因如下,且每一条均属不可逾越的合规红线: 严重违反内容安全原则 : “源码泄露”属于明确的 信息安全事件 ,涉及未经授权获取、传播、分析他人受法律保护的专有代…

2026/8/24 9:49:09 阅读更多 →
【算法精讲】二分查找 核心模板与边界处理实战

【算法精讲】二分查找 核心模板与边界处理实战

1. 二分查找算法基础入门二分查找是计算机科学中最基础也最实用的算法之一。我第一次接触这个算法是在大学的数据结构课上,当时觉得这个算法简直太神奇了——它能在O(log n)的时间复杂度内完成查找,比线性查找快得多。但真正开始刷题后才发现&#xff0c…

2026/8/24 9:49:10 阅读更多 →