Vue OptionsAPI與CompositionAPI的區(qū)別與使用介紹
OptionsAPI與CompositionAPI在代碼使用和邏輯上的區(qū)別
一、代碼使用方面的區(qū)別
(一)組件定義的結構
- OptionsAPI
- 以對象字面量的形式定義組件,對象包含多個屬性,每個屬性對應不同的功能。例如:
export default {
data() {
return {
message: 'Hello, OptionsAPI'
};
},
methods: {
sayHello() {
console.log(this.message);
}
},
mounted() {
this.sayHello();
}
};- 這里
data、methods、mounted等屬性分別定義了組件的數(shù)據(jù)、方法和生命周期鉤子等內(nèi)容,它們在一個大的對象結構下相互獨立存在。 - CompositionAPI
- 使用
setup函數(shù)作為組件邏輯的入口點,在函數(shù)內(nèi)部定義各種邏輯并返回供模板使用的值。例如:
- 使用
import { ref } from 'vue';
export default {
setup() {
const message = ref('Hello, CompositionAPI');
const sayHello = () => {
console.log(message.value);
};
sayHello();
return {
message,
sayHello
};
}
};- 在
setup函數(shù)中,將響應式數(shù)據(jù)(如ref創(chuàng)建的數(shù)據(jù))、方法等邏輯緊湊地組合在一起,然后通過返回值將需要在模板中使用的數(shù)據(jù)和方法暴露出去。
(二)響應式數(shù)據(jù)的定義與使用
OptionsAPI
- 在
data函數(shù)中定義響應式數(shù)據(jù)。例如:
export default {
data() {
return {
count: 0
};
},
methods: {
increment() {
this.count++;
}
}
};- 響應式數(shù)據(jù)通過
this關鍵字在methods、watch等其他屬性中訪問和修改。這里的this指向組件實例,這種方式在多層嵌套函數(shù)或回調(diào)函數(shù)中使用時可能會出現(xiàn)this指向混淆的問題。- CompositionAPI
- 使用
ref或reactive函數(shù)來定義響應式數(shù)據(jù)。 - 例如使用
ref:
import { ref } from 'vue';
export default {
setup() {
const count = ref(0);
const increment = () => {
count.value++;
};
return {
count,
increment
};
}
};- 或者使用
reactive(用于創(chuàng)建對象類型的響應式數(shù)據(jù)):
import { reactive } from 'vue';
export default {
setup() {
const state = reactive({
count: 0
});
const increment = () => {
state.count++;
};
return {
state,
increment
};
};
};- 響應式數(shù)據(jù)通過
value屬性(ref類型)或者直接操作對象屬性(reactive類型)來進行訪問和修改,避免了this指向問題。
(三)邏輯復用的實現(xiàn)方式
- OptionsAPI
- 主要通過
mixins來實現(xiàn)邏輯復用。例如,創(chuàng)建一個mixin對象:
- 主要通過
const myMixin = {
data() {
return {
sharedData: 'This is shared data'
};
},
methods: {
sharedMethod() {
console.log('This is a shared method');
}
}
};
export default {
mixins: [myMixin],
// 組件自身的其他邏輯
data() {
return {
componentData: 'This is component - specific data'
};
},
mounted() {
this.sharedMethod();
}
};但是mixins存在一些問題,如可能導致命名沖突(如果多個mixins中有相同名稱的屬性或方法),并且在組件中使用時,難以追蹤某個屬性或方法的來源。
- CompositionAPI
- 通過自定義組合函數(shù)來實現(xiàn)邏輯復用。
例如:
import { ref } from 'vue';
const useCounter = () => {
const count = ref(0);
const increment = () => {
count.value++;
};
return {
count,
increment
};
};
export default {
setup() {
const { count, increment } = useCounter();
return {
count,
increment
};
}
};- 自定義組合函數(shù)可以在多個組件中復用,代碼結構清晰,易于理解和維護。
二、邏輯方面的區(qū)別
(一)邏輯內(nèi)聚性
- OptionsAPI
- 相關邏輯分散在不同的選項屬性中。例如,與一個數(shù)據(jù)相關的初始化邏輯可能在
data中,對該數(shù)據(jù)的操作邏輯在methods中,數(shù)據(jù)變化的監(jiān)聽邏輯在watch中。這種分散的結構使得在處理復雜功能時,需要在多個屬性之間切換來理解完整的邏輯流程。
- 相關邏輯分散在不同的選項屬性中。例如,與一個數(shù)據(jù)相關的初始化邏輯可能在
- CompositionAPI
- 在
setup函數(shù)中可以將相關邏輯組合在一起。例如,對于一個計數(shù)器功能,可以在setup函數(shù)中同時定義響應式數(shù)據(jù)、操作數(shù)據(jù)的方法以及相關的生命周期鉤子(如果需要),使得整個功能的邏輯更加內(nèi)聚,便于理解和維護。
- 在
(二)對Type - Script的支持邏輯
- OptionsAPI
- 在OptionsAPI中使用TypeScript時,需要為每個選項屬性分別定義類型。例如,在
data函數(shù)中定義的數(shù)據(jù)需要單獨定義類型,methods中的方法也需要定義參數(shù)和返回值的類型等。這使得類型定義分散在整個組件定義中,代碼結構相對復雜。 - 如下是一個使用TypeScript的OptionsAPI示例:
- 在OptionsAPI中使用TypeScript時,需要為每個選項屬性分別定義類型。例如,在
export default {
data(): {
message: string;
} {
return {
message: 'Hello'
};
},
methods: {
sayHello(): void {
console.log(this.message);
}
}
};- CompositionAPI
- 由于以函數(shù)形式組織邏輯,在
setup函數(shù)中可以更方便地進行整體的類型定義??梢詫?code>setup函數(shù)的輸入?yún)?shù)和返回值進行類型定義,并且在自定義組合函數(shù)中也能很好地定義類型。這種方式與TypeScript的函數(shù)類型系統(tǒng)結合得更加緊密,代碼的類型定義更加簡潔清晰。 - 例如:
- 由于以函數(shù)形式組織邏輯,在
import { ref } from 'vue';
const useCounter = (): {
count: { value: number };
increment: () => void;
} => {
const count = ref(0);
const increment = () => {
count.value++;
};
return {
count,
increment
};
};
export default {
setup(): {
count: { value: number };
increment: () => void;
} {
const { count, increment } = useCounter();
return {
count,
increment
};
}
};到此這篇關于Vue OptionsAPI與CompositionAPI的區(qū)別的文章就介紹到這了,更多相關Vue OptionsAPI與CompositionAPI內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
- 淺談Vue3.0新版API之composition-api入坑指南
- Vue3 composition API實現(xiàn)邏輯復用的方法
- Vue3 Composition API的使用簡介
- 詳解Vue3 Composition API中的提取和重用邏輯
- vue3.0 的 Composition API 的使用示例
- Vue3中Composition?API和Options?API的區(qū)別
- 詳解vue3.0 的 Composition API 的一種使用方法
- Vue2如何支持composition API示例詳解
- vue composition-api 封裝組合式函數(shù)的操作方法
- Vue3中使用Composition API管理組件狀態(tài)
相關文章
Vuex state中同步數(shù)據(jù)和異步數(shù)據(jù)方式
這篇文章主要介紹了Vuex state中同步數(shù)據(jù)和異步數(shù)據(jù)方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-08-08
如何使用yarn創(chuàng)建vite+vue3&&electron多端運行
這篇文章主要介紹了如何使用yarn創(chuàng)建vite+vue3&&electron多端運行,本文分步驟給大家介紹的非常詳細,包括使用yarn創(chuàng)建vite+vue3項目會遇到哪些問題,感興趣的朋友跟隨小編一起看看吧2024-03-03
Vue+Elementui el-tree樹只能選擇子節(jié)點并且支持檢索功能
這篇文章給大家介紹了Vue+Element UI el-tree樹只能選擇子節(jié)點并且支持檢索的文章,通過實例代碼給大家介紹的非常詳細,感興趣的朋友跟隨小編一起看看吧2024-12-12

