Vue3中的<script setup>和<script>的区别

本文介绍了Vue3中<scriptsetup>与<script>标签的不同之处,<scriptsetup>会预处理为setup()函数,而<script>仅初次执行。作者分享了如何利用这些差异存放字面量和TS类型声明的示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

相同点

在一个 Vue3 单文件组件 (SFC)中,<script setup><script> 它们各自最多只能存在一个。

不同点

<script setup> 这个脚本块将被预处理为组件的 setup() 函数,这意味着它将为每一个(也可以说每一次)组件实例都执行。

<script> 只在组件被首次引入的时候执行一次,其它地方引入或再次实例化都不会再执行。

使用

所以我们可以利用这个差异性做一些事情。

1、除<script setup> 标签外再起一个<script>标签来存放一些字面量。
<script lang="ts">
export const componentName = 'MyComponent';

export default {
	name: componentName
	inheritAttrs: false,
	customOptions: {}
}
</script>
<script setup lang="ts">
// ...
console.log(componentName)
</script>
2、除<script setup> 标签外再起一个<script>标签来存放TS类型声明。
<script lang="ts">
export type Test = {
  aaa: string
}

// 底部必须要有export或非TS类型申明代码,否则vscode中下方代码颜色会出现异常,原因未知
export {}
</script>
<script setup lang="ts">
// ...
const obj: Test = { aaa: '1' }
</script>

参考

<think>嗯,用户现在想了解Vue项目中<script setup>中的setup属性的作用。首先,我需要回忆一下Vue 3中的Composition API,因为<script setup>是与之相关的语法糖。 首先,setup属性是Vue 3.2引入的,用于简化组件的编写。在传统的Composition API中,我们需要在setup函数中返回对象,而使用<script setup>后,代码会更简洁。那它的作用主要有哪几个方面呢? 第一,应该是自动暴露顶级变量函数。在普通的setup函数里,必须return才能让模板访问到,而使用<script setup>后,声明的变量、函数以及import进来的内容都会自动暴露。这样减少了代码量,特别是对于小型组件来说更方便。 第二,应该是更好的TypeScript支持。因为所有类型都能根据变量声明自动推断,不需要显式定义类型,这对于TS项目来说是个优势,减少了样板代码。 第三,与普通script的比较。相比于普通的<script>标签,<script setup>在编译时会有更多的优化,比如更高效的代码生成,以及更好的IDE支持,比如Volar插件能够提供更好的语法提示检查。 然后,可能还需要提到它如何简化代码结构,比如不再需要显式导出,组件注册可以通过导入后直接使用,而不需要在components选项中注册。例如,直接import一个组件,然后在模板中使用,不需要components: { MyComponent }。 另外,关于propsemit的定义,在<script setup>中使用definePropsdefineEmits,这些编译器宏会自动处理props事件的声明,而不需要像之前那样在setup函数中通过参数来解构。 可能还需要举例说明代码对比,比如传统setup函数<script setup>写法的不同,让用户更直观地看到差异。 然后,用户的问题可能涉及为什么使用setup属性,或者它解决了什么问题。这时候需要解释传统Options API的局限性,以及Composition API带来的更好的逻辑组织方式,而<script setup>进一步简化了这种写法。 可能还要提到响应式系统,比如refreactive在<script setup>中的使用方式是否改变,但实际使用方式是一样的,只是不需要return了。 最后,总结一下主要作用:简化代码结构、自动暴露变量、更好的TS支持、编译优化。 然后,根据用户的要求,生成相关问题。比如关于defineProps的使用,响应式变量的处理,Options API的区别,以及生命周期钩子的使用差异。</think><< `<script setup>` 是 Vue 3.2+ 中用于简化 Composition API 写法的编译时语法糖。它的核心作用是: 1. **自动暴露顶级变量函数** ```vue <script setup> import { ref } from &#39;vue&#39; const count = ref(0) // 自动暴露给模板,无需手动 return </script> ``` 2. **更简洁的组件注册** ```vue <script setup> import MyComponent from &#39;./MyComponent.vue&#39; // 直接使用,无需 components: { MyComponent } </script> <template> <MyComponent /> </template> ``` 3. **直接使用 `defineProps` `defineEmits`** ```vue <script setup> const props = defineProps({ title: String }) const emit = defineEmits([&#39;submit&#39;]) </script> ``` 4. **更好的 TypeScript 类型推断** 所有声明自动推导类型,无需额外类型注解。 **原理**:`<script setup>` 会被编译为标准的 `<script>` 格式,在编译阶段自动处理变量暴露上下文绑定。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值