vue3編寫組件的幾種實(shí)現(xiàn)方式
一、選項(xiàng)式寫法
在 vue2.x 項(xiàng)目中使用的寫法就是選項(xiàng)API的寫法
(說明:類似于與vue2中的data里面寫的是定義的數(shù)據(jù),methods里面寫的是處理數(shù)據(jù)的方法,每一個(gè)選項(xiàng)都只負(fù)責(zé)自己的部分)
- 優(yōu)點(diǎn):易于學(xué)習(xí),代碼位置固定,便于閱讀;
- 缺點(diǎn):代碼組織性差,相似的邏輯代碼不便于復(fù)用;
vue3的選項(xiàng)式寫法中也可以有vue2的寫法
如果是新項(xiàng)目,應(yīng)只選擇vue3的寫法(這里指vue3的項(xiàng)目)
代碼如下:
<template>
<div>
<div>
num3: {{ num3 }}
</div>
<div>
num2: {{ num2 }}
</div>
</div>
</template>
// 類似于vue2中,data中定義數(shù)據(jù),methods就寫方法,每一個(gè)選項(xiàng)就寫對應(yīng)所負(fù)責(zé)的東西
<script>
import { ref } from "vue";
export default {
// vue3代碼
props: {
testProps: {
type: Number,
default: () => {
return 123456;
},
},
}, // 接收傳過來的數(shù)據(jù)
setup(props, context) {
console.log("setup的props", props); // 父組件傳遞過來的數(shù)據(jù),但是前提是需要在props進(jìn)行數(shù)據(jù)的接收,否則無法使用
console.log("testProps", props.testProps); // 123456
console.log("setup的context", context);
const num3 = ref(1);
const addV3 = () => {
num3.value++;
};
return { num3, addV3 }; // 使用選項(xiàng)式寫法這里必須將數(shù)據(jù)return出去
},
// vue2代碼
data() {
return {
num2: 456,
};
},
methods: {
addV2() {
this.num2++; // 這里面是可以使用this的,但是setup中不可以使用this
},
},
mounted() {},
};
</script>二、組合式寫法
組合式寫法(vue3特有的寫法)
- 優(yōu)點(diǎn):一個(gè)功能邏輯的代碼組織寫在一起的,便于閱讀和維護(hù);
- 缺點(diǎn):需要有良好的代碼組織能力和拆分邏輯能力;
說明:使用選項(xiàng)式的寫法寫vue3里面可以有vue2的代碼,但是如果采用vue3語法糖的寫法里面是不能有vue2的寫法的;
<template>
<div>
<div>
num: {{ num }}
</div>
<div>
comValue: {{ comValue }}
</div>
</div>
</template>
// 組合式寫法
<script setup> // vue3的語法糖
import { computed, ref } from "vue";
const num = ref(123);
const comValue = computed(() => {
return num.value = num.value + 1;
})
const add = () => {
num.value++ // 使用ref定義的值需要使用點(diǎn)value的形式進(jìn)行取值
}
console.log(comValue.value); // 124
</script>三、JSX寫法
使用defineComponent來書寫組件的代碼
<template>
<div>
<div>
num: {{ num }}
</div>
</div>
</template>
<script>
import { defineComponent, ref } from "vue";
// 在defineComponent使用vue3+vue2寫法
export default defineComponent({
setup() {
const num = ref(12);
return {
num
}
},
data() {
return { count: 1 }
},
methods: {
increment() {
this.count++;
}
}
})
// 直接在defineComponent使用vue3寫法
// export default defineComponent(() =>{
// const count = ref(0)
// return { count }
// })
</script>總結(jié)
雖然vue3出來也有一段時(shí)間了,但是很多項(xiàng)目還是用的vue2,我覺得我們也應(yīng)該慢慢的去使用vue3了,從vue2到vue3的過渡,要養(yǎng)成一個(gè)良好的編碼習(xí)慣;建議使用vue3組合式的語法糖寫法。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Vue3.0插件執(zhí)行原理與實(shí)戰(zhàn)
這篇文章主要介紹了Vue3.0插件執(zhí)行原理與實(shí)戰(zhàn),Vue項(xiàng)目能夠使用很多插件來豐富自己的功能Vue-Router、Vuex等,節(jié)省了我們大量的人力和物力,下面我們就一起來了解Vue3.0插件的原理吧,需要的小伙伴可以參考一下2022-02-02
vue elementui select標(biāo)簽監(jiān)聽change事件失效問題
這篇文章主要介紹了vue elementui select標(biāo)簽監(jiān)聽change事件失效問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-04-04
Vue模板語法中數(shù)據(jù)綁定的實(shí)例代碼
這篇文章主要介紹了Vue模板語法中數(shù)據(jù)綁定的實(shí)例代碼,非常不錯(cuò),具有一定的參考借鑒價(jià)值 ,需要的朋友可以參考下2019-05-05
Vue如何解決每次發(fā)版都要強(qiáng)刷清除瀏覽器緩存問題
這篇文章主要介紹了Vue如何解決每次發(fā)版都要強(qiáng)刷清除瀏覽器緩存問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-08-08
Vue使用v-model封裝el-pagination組件的全過程
通過封裝el-pagination組件開發(fā)自定義分頁組件的類似文章網(wǎng)上已經(jīng)有很多了,但看了一圈,總是不如意,于是決定還是自己動手搞一個(gè),對v-model封裝el-pagination組件相關(guān)知識感興趣的朋友一起看看吧2021-07-07
Vue中實(shí)現(xiàn)深度監(jiān)聽的方法小結(jié)
在Vue中,深度監(jiān)聽是一種非常常見且重要的功能,它可以讓我們監(jiān)聽對象內(nèi)部的所有屬性,并對這些屬性的變化做出相應(yīng)的處理,在本篇博客中,我將為大家介紹Vue中如何實(shí)現(xiàn)深度監(jiān)聽的方法,需要的朋友可以參考下2024-09-09
Vue中使用echarts實(shí)現(xiàn)繪制人體動態(tài)圖
這篇文章主要為大家詳細(xì)介紹了Vue中如何使用echarts實(shí)現(xiàn)繪制人體動態(tài)圖,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-03-03

