前言

在 vue3 里,分为选项式 API 和 组合式 API,选项式 API 基本就是 vue2 时期的语法了,不推荐使用,详见 vue2 组件的 n 种写法。更推荐的是 组合式 API。本文也是只介绍组合式 API 的方式。
vue 的组件拆开来其实分成两大块,数据和模版字符串,vue 组件的不同写法一般是模版字符串的来源不同,可以从 template选项来,可以从 setup返回的渲染函数来,也可以从单文件组件的 <template>标签内来。

template 写法

  1. import { ref } from "vue"
  2. export default {
  3. template: `
  4. <div>
  5. {{ count }}
  6. <button @click="add">加一</button>
  7. </div>
  8. `,
  9. setup() {
  10. const count = ref(0);
  11. const add = () => {
  12. count.value++;
  13. }
  14. return {
  15. count,
  16. add
  17. }
  18. }
  19. }

渲染函数写法

模版如果不写在 template选项中,可以写在setup函数中。在setup中返回一个渲染函数。

  1. import { ref, h } from "vue"
  2. export default {
  3. setup() {
  4. const count = ref(0);
  5. const add = () => {
  6. count.value++;
  7. }
  8. return () => h("div", [
  9. count.value,
  10. h("button", {
  11. onClick: add
  12. }, "加一")
  13. ])
  14. }
  15. }

单文件组件

单文件组件,即 .vue文件,需要 vue-loader编译器的支持。
单文件组件中提供了 setup()函数的简写方式 <script setup>,因此使用单文件组件时一般直接使用 <script setup>的形式。
语法如下:

  1. <template>
  2. <div>
  3. {{ count }}
  4. <button @click="add">加一</button>
  5. </div>
  6. </template>
  7. <script setup>
  8. import { ref } from "vue";
  9. const count = ref(0);
  10. const add = () => {
  11. count.value++;
  12. }
  13. </script>