接著繼續看官方文件,我們可以看到官方提到Vue的組件可以按照兩種不同風格書寫,分別是選項式API
以及組合式API
。
從Vue 3.0開始,引入了Composition API
作為選擇性 API 的一部分。Composition API
和Options API
是Vue開發中兩種不同的API風格,它們各自具有不同的特點和用法。
以下是Composition API
和Options API
之間的主要區別,包括項目、代碼示例和圖表:
data
、methods
、computed
等選項來組織代碼。依照選項功能
區分程式碼:
必須在對應的methods
、data
寫對應的代碼
data():將變數寫在這一區,可以透過this
訪問
<template>
<div>
<p>{{ message }}</p>
</div>
</template>
<script>
export default {
data() {
return {
message: 'Hello Vue!',
};
},
};
</script>
methods:將function寫入這一區
<template>
<div>
<p>{{ message }}</p>
<button @click="changeMessage">Change Message</button>
</div>
</template>
<script>
export default {
data() {
return {
message: 'Hello Vue!',
};
},
methods: {
changeMessage() {
this.message = 'New Message';
},
},
};
</script>
mounted:負責元件的生命週期
<script>
export default {
data() {
return {
message: 'Hello Vue!',
};
},
mounted() {
console.log('Component is mounted');
},
};
</script>
官方文件的代碼:
<script>
export default {
// data() 返回的属性将会成为响应式的状态
// 并且暴露在 `this` 上
data() {
return {
count: 0
}
},
// methods 是一些用来更改状态与触发更新的函数
// 它们可以在模板中作为事件处理器绑定
methods: {
increment() {
this.count++
}
},
// 生命周期钩子会在组件生命周期的各个不同阶段被调用
// 例如这个函数就会在组件挂载完成后被调用
mounted() {
console.log(`The initial count is ${this.count}.`)
}
}
</script>
<template>
<button @click="increment">Count is: {{ count }}</button>
</template>
依照程式邏輯
撰寫,我們不必將代碼侷限於一個個區塊,而是可以自然地利用程式本身邏輯去撰寫。
通过组合式 API,我们可以使用导入的 API 函数来描述组件逻辑。在单文件组件中,组合式 API 通常会与
<script setup>
搭配使用。这个 setup attribute 是一个标识,告诉 Vue 需要在编译时进行一些处理,让我们可以更简洁地使用组合式 API。比如, 中的导入和顶层变量/函数都能够在模板中直接使用。
來源:官方文件
在Composition API中,可以使用ref
、reactive
或setup
函數來定義數據。ref
用於創建響應式數據,而reactive
用於創建響應式對象。<script setup>
函數是組件的入口點,可以在其中定義數據。
官方文件的代碼:
<script setup>
import { ref, onMounted } from 'vue'
// 响应式状态
const count = ref(0)
// 用来修改状态、触发更新的函数
function increment() {
count.value++
}
// 生命周期钩子
onMounted(() => {
console.log(`The initial count is ${count.value}.`)
})
</script>
<template>
<button @click="increment">Count is: {{ count }}</button>
</template>
來源:官方文件
看下面這張圖,就能一目瞭然這兩個API的差異了
功能 | Composition API | Options API |
---|---|---|
代碼組織 | 函數式風格,按功能組織代碼 | 選項式風格,按選項組織代碼 |
代碼重用 | 更容易重用代碼片段 | 較難重用代碼片段 |
可讀性 | 在大型組件中更容易維護 | 在大型組件中可能變得難以維護 |
TypeScript 支持 | 較易於與TypeScript集成 | 與TypeScript集成較困難 |
學習曲線 | 較陡峭的學習曲線 | 較平緩的學習曲線 |
生態系統 | 與Vue 2相容,但有些插件較少 | 與Vue 2相容,生態系統較完整 |