Vue 3 中的 <script setup> 语法糖

举报
周杰伦本人 发表于 2025/01/22 14:15:34 2025/01/22
130 0 0
【摘要】 Vue 3 中的 <script setup> 语法糖语法糖的功能就是让代码变的简洁在 Vue 3 中,<script setup> 是一个非常有用的语法糖,它可以让代码变得更加简洁和优雅。接下来,我们将详细学习如何使用 <script setup>,并理解其背后的原理。一、<script setup> 的基本使用(一)定义 <script setup><script setup> 是 Vu...

Vue 3 中的 <script setup> 语法糖

语法糖的功能就是让代码变的简洁

在 Vue 3 中,<script setup> 是一个非常有用的语法糖,它可以让代码变得更加简洁和优雅。接下来,我们将详细学习如何使用 <script setup>,并理解其背后的原理。

一、<script setup> 的基本使用

(一)定义 <script setup>

<script setup> 是 Vue 3.0 引入的一个新特性,它允许你在 <script> 标签中使用 setup 属性。这样,你就可以直接在 <script> 标签中编写 setup 函数中的内容,而不需要显式地定义 setup 函数和返回值。<script> 标签默认是js语言,所以后面到定义<script setup lang="ts">,表示使用的ts语言

<script setup>
  let a =666
</script>

这段代码就相当于

setup(){
  let a =666
  return {a}
}

(二)示例代码

Person.vue 组件改写为使用 <script setup> 的形式:

HTML复制

<template>
  <div class="person">
    <h2>姓名:{{ name }}</h2>
    <h2>年龄:{{ age }}</h2>
    <h2>地址:{{ address }}</h2>
    <button @click="changeName">修改名字</button>
    <button @click="changeAge">修改年龄</button>
    <button @click="showPhone">查看联系方式</button>
  </div>
</template>

<script setup lang="ts">
import { ref } from 'vue';

const name = ref('张三');
const age = ref(18);
const address = ref('贵州贵阳花果园');
const phone = ref('13812341234');

const changeName = () => {
  name.value = '张杠三';
};

const changeAge = () => {
  age.value += 1;
};

const showPhone = () => {
  alert(phone.value);
};
</script>

<style>
.person {
  background-color: #00f;
  color: #fff;
  padding: 20px;
  margin: 10px 0;
  border-radius: 5px;
  box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
}
button {
  margin: 5px;
  padding: 5px 10px;
  cursor: pointer;
}
</style>

(三)解释

  1. 定义响应式数据:使用 ref 函数定义响应式数据。ref 函数返回一个响应式引用对象,通过 .value 访问和修改其值。

  2. 定义方法:直接定义函数作为方法。

  3. 自动返回<script setup> 会自动将定义的响应式数据和方法返回到模板中使用,无需显式返回。

二、<script setup> 的优势

(一)简洁

  • 无需 setup 函数:直接在 <script> 标签中编写代码,无需定义 setup 函数。

  • 无需 return:定义的响应式数据和方法会自动返回到模板中使用,无需显式返回。

(二)示例代码

HTML复制

<template>
  <div class="person">
    <h2>姓名:{{ name }}</h2>
    <h2>年龄:{{ age }}</h2>
    <h2>地址:{{ address }}</h2>
    <button @click="changeName">修改名字</button>
    <button @click="changeAge">修改年龄</button>
    <button @click="showPhone">查看联系方式</button>
  </div>
</template>

<script setup lang="ts">
import { ref } from 'vue';

const name = ref('张三');
const age = ref(18);
const address = ref('北京昌平区宏福苑鸿福科技园');
const phone = ref('13812341234');

const changeName = () => {
  name.value = '张杠三';
};

const changeAge = () => {
  age.value += 1;
};

const showPhone = () => {
  alert(phone.value);
};
</script>

<style>
.person {
  background-color: #00f;
  color: #fff;
  padding: 20px;
  margin: 10px 0;
  border-radius: 5px;
  box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
}
button {
  margin: 5px;
  padding: 5px 10px;
  cursor: pointer;
}
</style>

(三)解释

  1. 定义响应式数据:使用 ref 函数定义响应式数据。

  2. 定义方法:直接定义函数作为方法。

  3. 自动返回<script setup> 会自动将定义的响应式数据和方法返回到模板中使用。

三、组件名称的配置

(一)组件名称

在使用 <script setup> 时,组件的名称可以通过 name 属性或文件名来配置。如果需要自定义组件名称,可以使用 name 属性,但是要需要插件的支持,所以还要安装插件。

(二)示例代码

HTML复制

<template>
  <div class="person">

  </div>
</template>

<script setup lang="ts" name="Person234">
</script>

<style>

</style>

四、安装插件支持

(一)安装插件

为了支持 <script setup> 中的 name 属性,需要安装一个插件 vite-plugin-vue-setup-extend

(二)安装命令

bash复制

npm install vite-plugin-vue-setup-extend --save-dev

(三)配置 vite.config.js

vite.config.js 中引入并配置插件:

JavaScript复制

import { defineConfig } from 'vite';
import vue from '@vitejs/plugin-vue';
import viteSetupExtend from 'vite-plugin-vue-setup-extend';

export default defineConfig({
  plugins: [vue(), viteSetupExtend()]
});

(四)解释

  1. 安装插件:安装 vite-plugin-vue-setup-extend 插件。

  2. 配置插件:在 vite.config.js 中引入并配置插件,以支持 <script setup> 中的 name 属性。

五、总结

(一)<script setup> 的优势

  • 简洁:无需定义 setup 函数和返回值。

  • 自动返回:定义的响应式数据和方法会自动返回到模板中使用。

(二)组件名称的配置

  • 文件名:默认使用文件名作为组件名称。

  • name 属性:通过 name 属性自定义组件名称。

(三)插件支持

  • 安装插件:安装 vite-plugin-vue-setup-extend 插件。

  • 配置插件:在 vite.config.js 中引入并配置插件,以支持 <script setup> 中的 name 属性。

相信你已经理解和使用 Vue 3 中的 <script setup> 语法糖了。在实际开发中,使用 <script setup> 可以让代码更加简洁和优雅,提高开发效率。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

作者其他文章

评论(0

抱歉,系统识别当前为高风险访问,暂不支持该操作

    全部回复

    上滑加载中

    设置昵称

    在此一键设置昵称,即可参与社区互动!

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。