vue3 中,setup 函数 和 <script setup> 的区别

  • App.vue → 根组件
  • ChildSetup.vue → 用 setup 函数 的子组件
  • ChildScriptSetup.vue → 用 的子组件

**## 1. App.vue

js 复制代码
<template>
<div>
<h2>父组件</h2>
<ChildSetup ref="setupRef" />
<ChildScriptSetup ref="scriptSetupRef" />
</div>
</template>

<script setup>
import { onMounted, ref } from 'vue'
import ChildSetup from './ChildSetup.vue'
import ChildScriptSetup from './ChildScriptSetup.vue'

const setupRef = ref(null)
const scriptSetupRef = ref(null)

onMounted(() => {
console.log('setup 子组件实例:', setupRef.value)
console.log('script setup 子组件实例:', scriptSetupRef.value)
})
</script>

2. ChildSetup.vue(setup 函数写法)

js 复制代码
<template>
<div>
<h3>我是 setup 函数组件</h3>
<p>{{ msg }}</p>
<button @click="increase">count: {{ count }}</button>
</div>
</template>

<script>
import { ref } from 'vue'

export default {
name: 'ChildSetup',
setup(props, { expose }) {
const msg = 'Hello from setup()'
const count = ref(0)
function increase() {
count.value++
}

// 显式暴露出去
expose({ msg, count, increase })

return {
msg,
count,
increase,
}
}
}
</script>

3. ChildScriptSetup.vue

js 复制代码
<template>
<div>
<h3>我是 script setup 语法糖组件</h3>
<p>{{ msg }}</p>
<button @click="increase">count: {{ count }}</button>
</div>
</template>
<script setup>
import { ref } from 'vue'
const msg = 'Hello from <script setup>'
const count = ref(0)
function increase() {
count.value++
}
// 如果不写 defineExpose,默认不暴露任何东西
defineExpose({
msg,
count,
increase
})
</script>

运行效果

  1. 页面上能看到两个子组件,按钮点了都会加 1。
  2. 打开控制台,你会看到类似输出:
js 复制代码
setup 子组件实例: Proxy { msg: "Hello from setup()", count: RefImpl, increase: ƒ }
script setup 子组件实例: Proxy { msg: "Hello from <script setup>", count: RefImpl, increase: ƒ }

如果你把 ChildScriptSetup.vue 里的 defineExpose 删掉, 再看输出,会变成:

js 复制代码
script setup 子组件实例: Proxy {}
```**
相关推荐
Mh2 小时前
别再只会 `find` 了:Map 在前端业务里的真实用法
前端·javascript
陈随易2 小时前
FFmpeg 9.0 发布,代号 Lei,音视频处理再升级
前端·后端·程序员
爱丶狸3 小时前
Grafana_Zabbix_ImageRenderer_部署与前端操作手册
linux·前端·zabbix·grafana·kylin
用户059540174465 小时前
把AI对话记忆存储测试从手工改成Playwright+pytest,覆盖率从20%提到96%,回归时间缩短90%
前端·css
kyriewen5 小时前
别再这样写TypeScript了——Code Review中最常见的8个反模式
前端·javascript·typescript
名字还没想好☜6 小时前
Next.js ‘use client‘ 到底加在哪:Server/Client Components 边界与常见报错
开发语言·前端·javascript·react·next.js
午安~婉6 小时前
GitHub Token/ GitHub Stats统计显示图异常
前端·github·vercel·github token
码云之上6 小时前
AI Agent 工程化总览篇:从 Prompt 到 Harness
前端·人工智能
2501_926978336 小时前
以说明书 DNA 为模板——完整 AGI 的结构图景
前端·人工智能·经验分享·笔记·ai写作
IT_陈寒6 小时前
Vite静态资源引用这个坑我踩得有点疼
前端·人工智能·后端