從 Vue 3 開始,Vue 經過多次語法演進,到目前 Vue 3.2 所提供的 Script Setup 後,Vue 的寫法總算穩定下來,也是目前 Vue 官網範例的正式寫法,但還是有不少網路上範例或書籍用的是 Vue 3 早期寫法,雖然不再建議這樣寫,但還是得看得懂,並藉此了解 Vue 語法的演變軌跡。
Version
Vue 3.4
Options API
<template>
<button @click="onClick">+</button>
<div>{{ count }}</div>
</template>
<script>
export default {
data: () => ({
count: 0,
}),
methods: {
onClick() {
this.count++
},
},
}
</script>
- Vue 2 經典的 Options API 寫法,目前 Vue 3.4 還能運行,但已經很少人使用
Composition API
<template>
<button @click="onClick">+</button>
<div>{{ count }}</div>
</template>
<script>
import { ref } from 'vue'
export default {
setup() {
let count = ref(0)
let onClick = () => count.value++
return {
count,
onClick
}
}
}
</script>
- Vue 3.0 與 Vue 3.1 所使用語法
- Composition API 必須在
setup()
中組合
後才能使用
這種寫法雖然符合 JavaScript 語法,但
垃圾
仍然太多
Svelte
<script>
let count = 0
let onClick = () => count += 1
</script>
<button on:click={ onClick }>+</button>
<div>{ count }</div>
- 當時 Svelte 以這種超精簡語法震驚前端,因為 Svelte 透過 compiler 技巧,會將以上語法做加工
Script Setup
<template>
<button @click="onClick">+</button>
<div>{{ count }}</div>
</template>
<script setup>
import { ref } from 'vue'
let count = ref(0)
let onClick = () => count.value++
</script>
- Vue 3.2 受 Svelte 啟發,也採用 compiler 手法,僅留下最關鍵部分,剩下會由 Vite 在
編譯
時補齊 - Script Setup 是不折不扣的 syntax sugar
Conclusion
- Script Setup 已經扶正成為目前 Vue 最新寫法,Vue 官方文件也都使用 Script Setup 改寫
- 但 Script Setup 有其使用上限制,僅能搭配 Vite 編譯才能使用,若使用 CDN 不搭配 Vite 則無法使用