vue3中关于setup的两种写法:传统写法 setup() 和 Composition API的语法糖 script setup

news/2025/3/15 16:51:11/文章来源:https://www.cnblogs.com/smile-fanyin/p/18773891

以下是关于 Vue 3 中 <script setup> 和传统写法的详细说明,帮助你理解它们的区别和使用方式:


Vue 3 的两种主要写法

Vue 3 支持两种组件编写方式:Options API(类似 Vue 2)和 Composition API。而 <script setup> 是 Composition API 的语法糖,让代码更简洁。


1. 传统写法(不使用 <script setup>

需要手动通过 setup() 函数返回暴露的内容。

<script>
import { ref, reactive, onMounted } from 'vue';export default {name: 'MyComponent',setup() {// 定义响应式数据
    const count = ref(0);const state = reactive({ name: 'Vue 3' });// 定义方法
    const increment = () => {count.value++;};// 生命周期钩子
    onMounted(() => {console.log('组件已挂载');});// 必须返回模板中需要使用的数据和方法return {count,state,increment};}
}
</script>

特点

  • 必须使用 export default 定义组件。

  • 需要在 setup() 函数中手动返回暴露的内容。

  • 适合需要明确控制暴露内容的场景。


2. <script setup> 语法(推荐)

自动暴露顶层变量和方法,无需手动返回。

<script setup>
import { ref, reactive, onMounted } from 'vue';// 定义响应式数据
const count = ref(0);
const state = reactive({ name: 'Vue 3' });// 定义方法
const increment = () => {count.value++;
};// 生命周期钩子
onMounted(() => {console.log('组件已挂载');
});
</script>

特点

  • 不需要 export default,整个脚本视为 setup() 函数。

  • 所有顶层变量、函数自动暴露给模板,无需手动返回。

  • 代码更简洁,适合大多数场景。


关键区别

特性传统写法 (setup())<script setup>
是否需要 export default
暴露内容 需手动 return 自动暴露顶层变量和方法
代码简洁性 较冗长 更简洁
适用场景 需要精细控制暴露内容的场景 大多数场景,推荐默认使用

常见问题解答

1. 为什么要用 <script setup>

  • 更简洁:减少样板代码,自动暴露变量。

  • 更易维护:逻辑集中,避免 return 遗漏。

  • 性能优化:编译时优化,生成更高效的代码。

2. 如何在 <script setup> 中引入组件?

<script setup>
import ChildComponent from './ChildComponent.vue';
</script>

直接引入即可,无需在 components 选项中注册。

3. 如何定义生命周期钩子?

使用 onMounted, onUpdated 等函数:

<script setup>
import { onMounted } from 'vue';onMounted(() => {console.log('组件已挂载');
});
</script>

4. 需要手动返回内容吗?

  • 不需要!所有顶层变量(如 const, let, function)自动暴露。

  • 如果某些变量不想暴露,可以用 const _internalVar = ...(以下划线开头约定为私有)。

    //关于这里不想暴露变量,可以以下划线开头约定为私有,个人对这句话的疑问见 xxxxxxx


总结

  • <script setup>:代码更简洁,适合大多数场景,无需手动返回内容。

  • 用传统写法:需要精细控制暴露内容,或兼容旧代码时使用。

 
 
--------------------------    分割线(以下为个人注解,可以忽略)  ------------------------
以上文章由deepseek生成,记录一下个人的问题和deepseek的思考过程。
个人问题:
我看有的vue3的代码是在 script 的开始标签加 setup,关于setup的写法总共有几种,分别怎么写?我看有的vue3代码就没有export default,这个加与不加有什么区别?传统写法setup()代码最后还有通过return“返回所有需要暴露的内容”,这个是一定要写的吗?是不是不暴露就在html中没法引用了?是不是在script的开始标签中加了 setup ,最后就不用返回需要暴露的内容了。

deepseek的思考过程:

好的,我需要回答用户关于Vue 3中`<script setup>`用法的问题。用户提到在转换Vue 2代码到Vue 3时,有些代码使用了`<script setup>`而有些没有,想了解这两种写法的区别以及是否需要返回暴露的内容。首先,我需要回忆Vue 3的Composition API和`<script setup>`的语法。

Vue 3主要有两种编写组件的方式:Options API和Composition API。而`<script setup>`是Composition API的语法糖,用于更简洁地编写组件。1. **Options API vs Composition API**- Options API是Vue 2的写法,通过`data`, `methods`, `mounted`等选项组织代码。- Composition API引入`setup()`函数,允许更灵活的代码组织,尤其是逻辑复用。2. **`<script setup>`的作用**- `<script setup>`是编译时的语法糖,简化了Composition API的使用。- 在`<script setup>`中,声明的变量、函数等自动暴露给模板,无需显式返回。3. **是否需要`export default`**- 使用`<script setup>`时,不需要`export default`,因为整个脚本被视为组件的`setup()`函数。- 不使用`<script setup>`时,仍需要`export default`来定义组件选项。4. **暴露内容的方式**- 在普通`setup()`函数中,需要返回一个对象,包含需要暴露给模板的属性和方法。- 在`<script setup>`中,所有顶层绑定(如变量、函数)自动暴露,无需手动返回。接下来,我需要用简单易懂的语言解释这些概念,并给出示例代码,帮助用户理解不同写法的区别和使用场景。同时,要提醒用户在使用`<script setup>`时需要注意的事项,比如如何引入组件、使用生命周期钩子等。在整理答案时,要确保步骤清晰,避免技术术语过多,让新手能够轻松理解。最后,通过对比不同写法,说明各自的优缺点,帮助用户根据项目需求选择合适的编码方式。

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

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

相关文章

web68笔记(+禁用print_r、highlight)

web68 打开就直接说 Warning: highlight_file() has been disabled for security reasons in /var/www/html/index.php on line 19 猜跟之前代码一致,加了过滤 然后这⾥还把print_r给禁了,⽤var_dump()吧 c=var_dump(scandir("/")); 还是在跟⽬录 flag.txt 既然hig…

健身相关

后仰?10次 如何管理自己的症状 急性期https://new.qq.com/rain/a/20210819A094EC00犀牛数据地点+纳税排名

文本弹窗选择

@Entry@Componentstruct TextPickerDialogPage { fruits: string[] = [苹果, 橘子, 香蕉, 鸭梨, 西瓜] @State selectedIndex: number = 0 build() { Column({ space: 50 }) { Text(this.fruits[this.selectedIndex]) .fontWeight(FontWeight.Bold) .…

AP csa FRQ Q1 Past Paper 五年真题汇总 2023-2019

Author(wechat): bigshuang2020 ap csa tutor, AP计算机科学a老师 国际教育编程老师, 擅长答疑讲解,带学生实践学习。热爱创作,作品:ap csa原创教案,真题梳理汇总,FRQ专题冲刺。2023 FRQ Question 1 This question involves the appointmentBook class, which provides me…

自带弹窗-》删除功能提示

@Entry@Componentstruct AlertDialogPage { build() { Column() { Button(删除) .backgroundColor(Color.Red) .onClick(() => { AlertDialog.show( { title: 删除该记录?, //弹窗标题 message: 删除…

ASE90N25-ASEMI工业电机专用ASE90N25

ASE90N25-ASEMI工业电机专用ASE90N25编辑:ll ASE90N25-ASEMI工业电机专用ASE90N25 型号:ASE90N25 品牌:ASEMI 封装:TO-247 批号:最新 最大漏源电流:90A 漏源击穿电压:250V RDS(ON)Max:26mΩ 引脚数量:3 沟道类型:N沟道MOS管、中低压MOS管 漏电流:ua 特性:N沟道MO…

温度转化和蟒蛇绘制

蟒蛇绘制 import turtle turtle.setup(650,360,600,200) turtle.penup() turtle.fd(-250) turtle.pendown() turtle.pensize(25) turtle.pencolor("pink") turtle.seth(-40) for i in range(4): turtle.circle(40,80) turtle.circle(-40,80) turtle.circle(40,80/2) …

Java面向对象编程(OOP)

面向过程&面向对象 面向过程思想:步骤清晰简单,第一步该做什么,第二步该做什么... 适合处理一些较为简单的问题 线性思维面向对象四思想:物以类聚,分类的思维模式,思考问题首要解决问题需要哪些分类,然后对这些分类进行单独思考,最后才对某个分类下的细节进行面向过…

第二章作业

由于一至三题只存了源代码,自己写的没有保存,所以仅以截图展示。四至八题则采取代码和截图一起的方式展示。 2.4 import turtle turtle.setup(650,360,800,200) turtle.penup() turtle.fd(-250) turtle.pendown() turtle.pensize(25) turtle.seth(-40) colors = ["blue&…

book_第2章例题

1.温度转化(符号在后) 2.温度转化(符号在前) 3.蟒蛇例题

SvelteKit 最新中文文档教程(3)—— 数据加载

前言 Svelte,一个语法简洁、入门容易,面向未来的前端框架。 从 Svelte 诞生之初,就备受开发者的喜爱,根据统计,从 2019 年到 2024 年,连续 6 年一直是开发者最感兴趣的前端框架 No.1:Svelte 以其独特的编译时优化机制著称,具有轻量级、高性能、易上手等特性,非常适合构…

web57笔记(严格过滤-$和()来构造数字)

<?php/* # -*- coding: utf-8 -*- # @Author: h1xa # @Date: 2020-09-05 20:49:30 # @Last Modified by: h1xa # @Last Modified time: 2020-09-08 01:02:56 # @email: h1xa@ctfer.com # @link: https://ctfer.com */// 还能炫的动吗? //flag in 36.php if(isset($_GE…