Vue 3 引入的 <script setup>
语法糖是一种简化组件设置的新方法,它允许你直接在 <script>
标签中声明组件的状态(如响应式数据、计算属性、方法等)而无需显式返回一个对象。这不仅让组件的代码更加简洁,还促进了 Composition API 的使用。以下是关于 <script setup>
的一些关键点和如何处理点击事件的示例。
<script setup>
语法糖的特点
- 自动暴露:在
<script setup>
中声明的顶级变量(如ref、reactive创建的响应式数据,或者普通变量)会自动暴露给模板使用。 - 组合API友好:直接在
<script setup>
内部使用Composition API的函数,如ref
、reactive
、computed
、onMounted
等,无需导入。 - 类型推断:与TypeScript集成良好,提供更好的类型推断和提示。
注意事项
<script setup>
中的函数和变量默认是私有的,但可以通过defineExpose
显式暴露给父组件使用。- 不再需要
this
关键字来访问组件的属性或方法,因为它们处于同一个作用域内。 - 如果需要访问组件的上下文(如props、slots等),可以使用
defineProps
和defineEmits
来定义它们,或者直接在<script setup>
外部使用传统的setup(props, context)
函数签名。
介绍一下setup
当然,这里是一个更详细的示例,展示了如何在Vue 3中使用 <script setup>
语法糖以及如何处理点击事件。此例中,我们将创建一个简单的计数器组件,用户每点击一次按钮,计数器的值就增加1。
<!-- Counter.vue -->
<template>
<div>
<h2>计数器: {{ count }}</h2>
<button @click="increment">点击增加</button>
</div>
</template>
<script setup>
import { ref } from 'vue';
// 使用ref创建一个响应式数据count,初始值为0
const count = ref(0);
// 定义一个方法increment,用于增加计数器的值
const increment = () => {
count.value++;
};
</script>
解释
-
<template>
: 这里定义了组件的HTML结构,包括显示计数器的值 ({{ count }}
) 和一个按钮。按钮绑定了一个点击事件处理器 (@click="increment"
),当用户点击按钮时,会触发increment
方法。 -
<script setup>
:import { ref } from 'vue';
: 导入Vue的ref
函数,用于创建响应式引用。const count = ref(0);
: 使用ref
创建了一个响应式变量count
,初始化为0。在模板中可以直接通过{{ count }}
访问并显示其值。const increment = () => { count.value++; };
: 定义了一个方法increment
,当调用时会使count
的值加1。这里通过.value
来修改ref
包装的响应式数据。
这个例子展示了Vue 3中 <script setup>
语法糖的简洁性,以及如何直接在模板中绑定事件处理函数,而无需在组件的选项对象中显式声明。