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)就寫對(duì)應(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)文章
vue中v-model指令與.sync修飾符的區(qū)別詳解
本文主要介紹了vue中v-model指令與.sync修飾符的區(qū)別詳解,詳細(xì)的介紹了兩個(gè)的用法和區(qū)別,感興趣的可以了解一下2021-08-08Vue中使用md5進(jìn)行數(shù)據(jù)加密的實(shí)現(xiàn)方法
在現(xiàn)代Web開發(fā)中,數(shù)據(jù)安全是一個(gè)不可忽視的重要環(huán)節(jié),Vue.js作為一個(gè)流行的前端框架,不僅提供了強(qiáng)大的數(shù)據(jù)綁定和組件化功能,還支持與各種后端服務(wù)的集成,本文將探討如何在Vue應(yīng)用中使用MD5算法來加密數(shù)據(jù),從而提升應(yīng)用的安全性,需要的朋友可以參考下2024-10-10Vue使用html2canvas實(shí)現(xiàn)截取圖片并保存
html2canvas是一個(gè)JavaScript庫,它可以將HTML元素轉(zhuǎn)換為Canvas元素本文將介紹一下Vue如何使用html2canvas實(shí)現(xiàn)截取圖片并保存功能,需要的可以參考下2023-12-12Vue導(dǎo)出頁面為PDF格式的實(shí)現(xiàn)思路
這篇文章主要介紹了Vue導(dǎo)出頁面為PDF格式的實(shí)現(xiàn)思路,其實(shí)思路也很簡單,就是將頁面轉(zhuǎn)換成圖片格式.然后通過圖片的base64碼.生成PDF..感興趣的朋友跟隨腳本之家小編一起看看吧2018-07-07vue 實(shí)現(xiàn)剪裁圖片并上傳服務(wù)器功能
這篇文章主要介紹了vue 實(shí)現(xiàn)剪裁圖片并上傳服務(wù)器功能,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2018-03-03Element-UI實(shí)現(xiàn)復(fù)雜table表格結(jié)構(gòu)的操作代碼
Element-UI組件el-table用于展示多條結(jié)構(gòu)類似的數(shù)據(jù),可對(duì)數(shù)據(jù)進(jìn)行排序、篩選、對(duì)比或其他自定義操作,本文給大家介紹Element-UI實(shí)現(xiàn)復(fù)雜table表格結(jié)構(gòu)的操作代碼,感興趣的朋友一起看看吧2023-12-12Vue?+?SpringBoot?實(shí)現(xiàn)文件的斷點(diǎn)上傳、秒傳存儲(chǔ)到Minio的操作方法
這篇文章主要介紹了Vue?+?SpringBoot?實(shí)現(xiàn)文件的斷點(diǎn)上傳、秒傳存儲(chǔ)到Minio的操作方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2024-06-06vue報(bào)錯(cuò)之exports is not defined問題的解決
這篇文章主要介紹了vue報(bào)錯(cuò)之exports is not defined問題的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-07-07