setup() 函数与语法糖

文章目录

一、先一句话总纲

javascript 复制代码
- setup():Vue3 原来的原始写法,手动挡,要写 return,麻烦。

```javascript
- <script setup>:官方给的语法糖(简写版),自动挡,不用 return,代码更少,现在全都用这个。

 

二、先讲最原始的:setup() 函数

你就把它理解成:

组件的入口函数,比 beforeCreate 还早执行。

  1. 里面没有 this

this = undefined

不能用 this.$refs、this.message 之类。

  1. 接收两个参数
javascript 复制代码
js
  
setup(props, context) {
}
  • props:父组件传过来的值(响应式,但不能改)
  • context:里面有 emit、attrs、slots
  1. 必须 return!

你在 setup 里定义的变量、方法,

不 return,模板就看不见!

javascript 复制代码
js
  
setup() {
  const count = ref(0)
  return { count } // 不 return 模板用不了
}

缺点

麻烦、啰嗦、要写一堆重复代码。

三、再讲现在主流:

它就是:

Vue 帮你自动把代码塞进 setup() 里,还自动 return。

  1. 不用写 return

你定义啥,模板直接用:

vue

javascript 复制代码
<script setup>
const count = ref(0)
</script>
javascript 复制代码
<template>
  {{ count }}  <!-- 直接用!不用 return -->
</template>
 
  1. 导入组件就能用
javascript 复制代码
js
  
import Child from './Child.vue'
 

直接在模板用 ,不用注册!

原始写法还要:

javascript 复制代码
js
  
export default {
  components: { Child }
}

script setup 全都省了。

四、两者功能对比(最关键)

javascript 复制代码
1. 接收 props
 
原始 setup:
 
js
  
export default {
  props: ['title'],
  setup(props) {
    console.log(props.title)
  }
}
 
 
script setup:
 
js
  
const props = defineProps({
  title: String
})
 
 
2. 触发事件 emit
 
javascript 复制代码
原始 setup:
 
js
  
setup(props, { emit }) {
  emit('my-event')
}
 
 
script setup:
 
js
  
const emit = defineEmits(['my-event'])
emit('my-event')
 
 
3. 获取 attrs、slots
 
原始 setup 用 context:
 
js
  
setup(props, { attrs, slots })
 
 
script setup 用 API:
 
js
  
import { useAttrs, useSlots } from 'vue'
const attrs = useAttrs()
const slots = useSlots()
 
 
 
 

五、最核心区别(背这一段就够)

  1. setup()
  • 手动写,手动 return
  • 要写 export default、components
  • 代码多,适合老项目、复杂控制
  • 不用 return
  • 导入组件直接用
  • 用 defineProps / defineEmits
  • 现在官方推荐、所有人都用这个

六、你能立刻记住的超级口诀

  • 原始 setup:手动挡,要 return,麻烦。
  • script setup:自动挡,不用 return,简洁好用。
  • 功能一模一样,只是写法不一样。
  • 现在开发全都用 script setup。

七、我再用最通俗的话总结一遍

javascript 复制代码
> - setup() 是基础版本,什么都要自己写
>  - <script setup> 是懒人舒适版,Vue 帮你把重复的事全干了。
> - 它们底层跑起来是一样的。
> - 你以后写 Vue3,直接用 <script setup> 就对了

八、注册(components)不能写在setup函数里

  1. 先看注册(components)

    Vue 知道:我能用哪些组件,叫什么名字。

  2. 再解析模板

    看到 ,去表里查:有这个名字,认识。

  3. 最后才执行 setup

    去运行子组件自己的逻辑,生成数据、渲染内容。

相关推荐
别看我只是一直狼9 分钟前
从观察者模式到 RxJS:让复杂的异步逻辑变得优雅又舒服
javascript
花间相见9 分钟前
【终端效率工具01】—— Yazi:Rust 编写的现代化终端文件管理器,告别繁琐操作
前端·ide·git·rust·极限编程
|晴 天|19 分钟前
我如何用Vue 3打造一个现代化个人博客系统(性能提升52%)
前端·javascript·vue.js
风止何安啊27 分钟前
网页都知道要双向握手才加载!从 URL 到页面渲染,单向喜欢连 DNS 都解析不通
前端·javascript·面试
太极OS33 分钟前
给 AI Skill 做 CI/CD:GitHub + ClawHub + Xiaping 同步发布实战
前端
你_好33 分钟前
Chrome 内置了 AI 工具协议?WebMCP 抢先体验 + 开源 DevTools 全解析
前端·mcp
GISer_Jing33 分钟前
LangChain.js + LangGraph.js 前端AI开发实战指南
前端·javascript·langchain
正在发育ing__37 分钟前
从源码看vue的key和状态错乱的patch
前端
木心术139 分钟前
TypeScript实战进阶:从基础类型到高级类型编程
javascript·ubuntu·typescript
Hello--_--World1 小时前
浏览器同源策略与跨域问题
javascript