本文为视频笔记,视频地址:https://www.bilibili.com/video/BV1hh411p79n

Vue3.2新特性

  1. 新的单文件组特性

    <script setup>语法糖

    <style> v-bind新特性

  2. Web Components

  3. 性能提升

  4. 服务端渲染

  5. Effect 作用域 API

这里我们主要讲解前两个新特性,本节讲解<script setup>语法糖

使用vite创建vue-ts项目

有关vite的更多详细信息请参考Vite中文网:https://vitejs.cn/

在terminal中输入npm init vite@latest my-vue-app -- --template vue-ts,创建一个vite + vue + ts的项目

使用vite创建vue-ts项目

使用npm run dev启动项目

启动项目

可以看到这是一个vite + TypeScript +vue的项目

Vue3.0语法

我们先使用vue3.0的常见组件写法,这里我们实现一个整数和一个按钮,使得点击按钮时整数会自增:

<script lang="ts">
import { defineComponent, ref } from "vue";

export default defineComponent({
  setup() {
  const count = ref(1);
  const countIncrease = () => {
    count.value += 1
  }
  return {
    count,
    countIncrease
  };
  },
});
</script>

<template>
  {{ count }}
  <button @click="countIncrease">+</button>
</template>

<style scoped>
</style>

可以看到,我们编写的countcountAdd需要使用 return 语句进行导出,这样才可以在<template>中使用,而Vue3.2对此做了优化。

通过点击,我们使count增加到6

Vue3.2 语法

<script setup lang="ts">
import { ref } from "@vue/reactivity";

  const count = ref(1)
  const countIncrease = () => {
    count.value += 1
  }
</script>

<template>
  {{count }}
  <button @click="countIncrease">➕</button>
</template>

<style scoped>
</style>

首先让我们对比两种语法,看看vue3.2有什么不同:

  • Vue3.0我们使用setup函数,而Vue3.2通过<script setup> 表示setup函数的语法糖:

    也就是说,上述代码实际上都是属于Vue3.0中setup函数的内部

  • 在使用<script setup>语法糖时,我们不需要在通过return语句进行变量的导出了

那么,setup语法糖到底时怎么实现上述功能的呢,我们通过Vue提供的演练场https://sfc.vuejs.org/来一探究竟

setup语法糖原理分析

我们通过Vue提供的演练场环境https://sfc.vuejs.org进行代码的学习,在这里你可以看到我们编写的代码最终会被编译为何种js代码:

setup语法糖原理分析

可以看到,setup语法糖为我们所编译的js代码有如下特点:

  • 代码确实被放在setup函数内部,这样我们就不用显式编写setup函数了
  • 在setup函数内部,通过创建虚拟节点,直接使用创建的变量,这样就避免了最终需要导出的return语句