精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

基于 Vue3 和 TypeScript 項目大量實踐后的思考

開發 前端
Vue3出來已經有一段時間了,在團隊中,也進行了大量的業務實踐,也有了一些自己的思考。

 [[435877]]

概述

Vue3出來已經有一段時間了,在團隊中,也進行了大量的業務實踐,也有了一些自己的思考。

總的來說,Vue3無論是在底層的原理上,還是在業務的實際開發中,都有了長足的進步。

使用 proxy 代替之前的 Object.defineProperty 的API,性能更加優異,也解決了之前vue在處理對象、數組上的缺陷;在diff算法上,使用了靜態標記的方式,大大提升了Vue的執行效率。

在使用的層面,我們從options Api,變成了composition Api,慢慢的在實際的業務中,我們拋棄了原本的data、methods、computed那種隔離式的寫法。compositon Api,它更加聚焦,它講究的是相關業務的聚合性。同時,在composition Api中,為了防止過于重的業務邏輯,它提供了一種關注點分離的方式,大大的提升了我們代碼的可讀性。

完全良好的支持了TypeScript,類型校驗也成為了以后Vue3進行大型項目開發的質量保障,同時這也是面向了趨勢 -- 前端的未來就是TypeScript!

一、compositon Api

compositon Api的本質,體現在代碼里面,也就是一個setup函數,在這個setup函數中,返回的數據,會用到該組件的模板中。return的這個對象,一定程度上,代表了之前vue2中的data屬性。

  1. import { defineComponent, ref } from 'vue'
  2. export default defineComponent({ 
  3.     name: 'Gift'
  4.     setup() { 
  5.         const counter = ref(0); 
  6.         return { 
  7.             counter 
  8.         } 
  9.     } 
  10. }) 

這時候,對于大多數初學者來說,可能存在的疑惑就是,那么我能不能定義options Api的寫法,比如data、computed、watch、methods等等。

這里我需要明確的是,Vue3是完全兼容Vue2的這種options Api的寫法,但是從理念上來說,更加推薦setup的方式,來寫我們的組件。原因如下:Vue3的存在,本身是為了解決Vue2的問題的,Vue2的問題就是在于,聚合性不足,會導致代碼越來越臃腫!setup的方式,能夠讓data、方法邏輯、依賴關系等聚合在一塊,更方便維護。

也就是說,以后我們盡量不要寫單獨的data、computed、watch、methods等等,不是Vue3不支持,而是和Vue3的理念違背。

components屬性,也就是一個組件的子組件,這個配置在Vue2和3的差異不大,Vue2怎么用,Vue3依然那么用。

1、ref 和 reactive的區別?

在功能方面,ref 和 reactive,都是可以實現響應式數據!

在語法層面,兩個有差異。ref定義的響應式數據需要用[data].value的方式進行更改數據;reactive定義的數據需要[data].[prpoerty]的方式更改數據。

  1. const actTitle: Ref<string> = ref('活動名稱'); 
  2.  
  3. const actData = reactive({ 
  4.     list: [], 
  5.     total: 0
  6.     curentPage: 1
  7.     pageSize: 10 
  8. }); 
  9.  
  10. actTitle.value = '活動名稱2'
  11.  
  12. actData.total = 100

但是在應用的層面,還是有差異的,通常來說:單個的普通類型的數據,我們使用ref來定義響應式。表單場景中,描述一個表單的key:value這種對象的場景,使用reactive;在一些場景下,某一個模塊的一組數據,通常也使用reactive的方式,定義數據。

那么,對象是不是非要使用reactive來定義呢?其實不是的,都可以,根據自己的業務場景,具體問題具體分析!ref他強調的是一個數據的value的更改,reactive強調的是定義的對象的某一個屬性的更改。

2、周期函數

周期函數,在Vue3中,是被單獨使用的,使用方式如下:

  1. import { defineComponent, ref, onMounted } from 'vue'
  2. export default defineComponent({ 
  3.     name: 'Gift'
  4.     setup() { 
  5.         const counter = ref(0); 
  6.         onMounted(() => { 
  7.             // 處理業務,一般進行數據請求 
  8.         }) 
  9.         return { 
  10.             counter 
  11.         } 
  12.     } 
  13. }) 

3、store使用

在Vue2中,其實可以直接通過this.$store進行獲取,但是在Vue3中,其實沒有this這個概念,使用方式如下:

  1. import { useStore } from "vuex"
  2. import { defineComponent, ref, computed } from 'vue'
  3. export default defineComponent({ 
  4.     name: 'Gift'
  5.     setup() { 
  6.         const counter = ref(0); 
  7.         const store = useStore(); 
  8.         const storeData = computed(() => store); // 配合computed,獲取store的值。 
  9.         return { 
  10.             counter, 
  11.             storeData 
  12.         } 
  13.     } 
  14. }) 

4、router的使用

在Vue2中,是通過this.$router的方式,進行路由的函數式編程,但是Vue3中,是這么使用的:

  1. import { useStore } from "vuex"
  2. import { useRouter } from "vue-router"
  3. import { defineComponent, ref, computed } from 'vue'
  4. export default defineComponent({ 
  5.     name: 'Gift'
  6.     setup() { 
  7.         const counter = ref(0); 
  8.         const router = useRouter(); 
  9.         const onClick = () => { 
  10.             router.push({ name: "AddGift" }); 
  11.         } 
  12.         return { 
  13.             counter, 
  14.             onClick 
  15.         } 
  16.     } 
  17. }) 

二、關注點分離

關注點分離,應該分兩層意思:第一層意思就是,Vue3的setup,本身就把相關的數據,處理邏輯放到一起,這就是一種關注點的聚合,更方便我們看業務代碼。

第二層意思,就是當setup變的更大的時候,我們可以在setup內部,提取相關的一塊業務,做到第二層的關注點分離。

  1. import { useStore } from "vuex"
  2. import { useRouter } from "vue-router"
  3. import { defineComponent, ref, computed } from 'vue'
  4. import useMerchantList from './merchant.js'
  5. export default defineComponent({ 
  6.     name: 'Gift'
  7.     setup() { 
  8.         const counter = ref(0); 
  9.         const router = useRouter(); 
  10.         const onClick = () => { 
  11.             router.push({ name: "AddGift" }); 
  12.         } 
  13.         // 在該示例中,我們把獲取商家列表的相關業務分離出去。也就是下面的merchant.ts 
  14.         const {merchantList} = useMerchantList(); 
  15.         return { 
  16.             counter, 
  17.             onClick, 
  18.             merchantList 
  19.         } 
  20.     } 
  21. }) 

merchant.ts

  1. import { getMerchantlist } from "@/api/rights/gift"
  2. import { ref, onMounted } from "vue"
  3.  
  4. export default function useMerchantList(): Record<string, any> { 
  5.   const merchantList = ref([]); 
  6.   const fetchMerchantList = async () => { 
  7.     let res = await getMerchantlist({}); 
  8.     merchantList.value = res?.data?.child; 
  9.   }; 
  10.  
  11.   onMounted(fetchMerchantList); 
  12.  
  13.   return { 
  14.     merchantList 
  15.   }; 

三、TypeScript支持

這一部分內容,準確的來說,是TS的內容,不過它與Vue3項目開發,息息相關,所以真的想用Vue3,我們還是得了解TS的使用。

不過這一部分,我不會介紹TS的基礎語法,主要是在業務場景中,如何組織TS。

使用TS進行業務開發,一個核心的思維是,先關注數據結構,再根據數據結構進行頁面開發。以前的前端開發模式是,先寫頁面,后關注數據。

比如要寫一個禮品列表的頁面,我們可能要定義這么一些interface。總而言之,我們需要關注的是:頁面數據的interface、接口返回的數據類型、接口的入參類型等等。

  1. // 禮品創建、編輯、列表中的每一項,都會是這個數據類型。 
  2. interface IGiftItem { 
  3.   id: string | number; 
  4.   name: string; 
  5.   desc: string; 
  6.   [key: string]: any; 
  7.  
  8. // 全局相應的類型定義 
  9. // 而且一般來說,我們不確認,接口返回的類型到底是什么(可能是null、可能是對象、也可能是數組),所以使用范型來定義interface 
  10. interface IRes<T> { 
  11.     code: number; 
  12.     msg: string; 
  13.     data: T 
  14. // 接口返回數據類型定義 
  15.  
  16. interface IGiftInfo { 
  17.     list: Array<IGiftItem>; 
  18.     pageNum: number; 
  19.     pageSize: number; 
  20.     total: number; 

在一個常見的接口請求中,我們一般使用TS這么定義一個數據請求,數據請求的req類型,數據請求的res類型。

  1. export const getGiftlist = ( 
  2.   params: Record<string, any> 
  3. ): Promise<IRes<IGiftInfo>> => { 
  4.   return Http.get("/apis/gift/list", params); 
  5. }; 

 

 

責任編輯:張燕妮 來源: 三分鐘學前端
相關推薦

2021-05-26 10:40:28

Vue3TypeScript前端

2020-12-01 08:34:31

Vue3組件實踐

2020-09-17 07:08:04

TypescriptVue3前端

2023-04-02 10:06:24

組件vue3sign2.

2024-04-08 07:28:27

PiniaVue3狀態管理庫

2021-12-01 08:11:44

Vue3 插件Vue應用

2022-04-07 08:06:32

viteVue3項目

2024-03-27 08:41:09

Vue3Web應用emoji表情選擇器

2021-11-30 08:19:43

Vue3 插件Vue應用

2023-11-28 09:03:59

Vue.jsJavaScript

2021-10-21 06:52:17

Vue3組件 API

2024-04-16 07:46:15

Vue3STOMP協議WebSocket

2025-08-22 09:47:44

2025-10-17 07:10:00

2021-12-02 05:50:35

Vue3 插件Vue應用

2020-09-19 21:15:26

Composition

2020-10-25 18:43:20

VueTypeScript前端

2025-07-31 01:00:00

Vue3TypeScriptVite

2021-05-27 10:36:34

ProvideInjectVue3

2022-08-17 11:36:18

Vue3插件
點贊
收藏

51CTO技術棧公眾號

婷婷综合另类小说色区| 激情都市一区二区| 亚洲九九九在线观看| 久久午夜夜伦鲁鲁一区二区| 免费大片黄在线| 成人免费毛片aaaaa**| 青青在线视频一区二区三区| 欧美美女性生活视频| 激情小说亚洲色图| 欧美日韩一级片网站| 欧美精品卡一卡二| 99青草视频在线播放视| 成人97人人超碰人人99| 国产日韩在线视频| 好吊妞视频一区二区三区| 97久久夜色精品国产| 精品国产不卡一区二区三区| 黑森林精品导航| 69av成人| 亚洲欧美经典视频| 日韩欧美一区二区三区四区五区| 国产福利视频导航| 琪琪一区二区三区| 97视频在线观看网址| 免费高清在线观看电视| 九色精品91| 亚洲国产成人爱av在线播放| 国产精品嫩草影院8vv8| 欧美片第一页| 午夜欧美一区二区三区在线播放| 精品一区二区三区毛片| 超碰在线国产| 972aa.com艺术欧美| 91精品国产综合久久香蕉922| 秋霞av一区二区三区| 最新国产乱人伦偷精品免费网站| 免费91麻豆精品国产自产在线观看| 欧美日韩高清丝袜| 台湾色综合娱乐中文网| 精品剧情v国产在线观看在线| 在线黄色免费看| 全球最大av网站久久| 色88888久久久久久影院野外| 日韩日韩日韩日韩日韩| 波多野结衣精品| 一区二区久久久久| 亚洲国产精品影视| 好了av在线| 最新成人av在线| 亚洲一区二区三区色| 岛国视频免费在线观看| 国产午夜精品一区二区三区嫩草 | 国产精品欧美一级免费| 精品九九九九| 天堂网www中文在线| 91亚洲国产成人精品一区二三| 成人自拍网站| 国精品人妻无码一区二区三区喝尿 | www.麻豆av| 国产精品一区二区在线看| 91日本在线视频| 国产成人精品亚洲精品色欲| 国产精品一级黄| 成人高清在线观看| 人妻一区二区三区| 91啦中文在线观看| 日韩欧美亚洲区| 日本中文字幕电影在线免费观看 | 日本欧美韩国| 精品视频在线免费| 亚洲日本黄色片| 亚洲精品一区二区三区中文字幕| 欧美大片在线观看| 精品国产av色一区二区深夜久久 | 丁香亚洲综合激情啪啪综合| 电影午夜精品一区二区三区 | 精品久久国产一区| 精品久久久久久久久久久院品网 | 高清一区二区视频| 日韩综合久久| 欧美精品一区二区蜜臀亚洲| 风间由美一二三区av片| 日本欧美视频| 欧美黑人国产人伦爽爽爽| 日韩欧美中文字幕一区二区| 日韩精品每日更新| 91青草视频久久| 亚洲三区在线播放| 国产精品视频第一区| 成人国产在线看| 欧美三级精品| 91精品免费在线| 无码人妻aⅴ一区二区三区| 欧美一区三区| 欧美高跟鞋交xxxxxhd| 日本一区二区欧美| 免播放器亚洲一区| 国产欧美日韩一区二区三区| 国产精品天堂| 亚洲成人av电影| 午夜在线观看av| 欧洲亚洲视频| 欧美成人高清视频| 精人妻无码一区二区三区| 国产一区在线观看视频| 久久偷窥视频| av毛片在线播放| 欧洲国内综合视频| www.美色吧.com| 欧美gvvideo网站| 清纯唯美亚洲综合| xxxwww在线观看| 国产精品色一区二区三区| 亚洲熟妇无码一区二区三区导航| 伦一区二区三区中文字幕v亚洲| 亚洲成人在线网| 麻豆明星ai换脸视频| 日韩国产在线一| 国产在线精品日韩| 免费在线你懂的| 欧美综合亚洲图片综合区| 亚洲精品乱码久久久久久蜜桃图片| 99热国内精品永久免费观看| 日韩av电影手机在线| 日本黄视频在线观看| 亚洲色图.com| 羞羞的视频在线| 国产在线观看91一区二区三区| 97色在线观看免费视频| 午夜美女福利视频| 亚洲日本va在线观看| 久久久精品麻豆| 欧美先锋资源| 国产精品户外野外| 国产精品久久久久久久龚玥菲 | 国产综合在线视频| 亚洲AV无码乱码国产精品牛牛| 国产精品久久久久久久久图文区 | av中文一区二区三区| 丰满人妻一区二区三区53号| 国产999精品在线观看| 日韩中文字幕视频在线观看| 国产情侣小视频| 久久精品亚洲精品国产欧美kt∨ | 日韩欧美亚洲v片| 成人看片网页| 一区二区亚洲精品国产| 日韩一级片中文字幕| 久久久久九九视频| 91淫黄看大片| 成人在线电影在线观看视频| 国产精品久久久久久亚洲调教| jizz在线观看视频| 欧美性三三影院| 成人黄色短视频| 国产一区二区网址| 800av在线免费观看| www.久久东京| 91精品国产高清自在线| 欧美婷婷久久五月精品三区| 色综合天天综合网天天看片| av黄色免费网站| 日韩二区在线观看| 自拍偷拍亚洲色图欧美| 人人爱人人干婷婷丁香亚洲| 欧美巨乳在线观看| 天天干天天做天天操| 一本一道久久a久久精品 | 992tv人人草| 黄色欧美日韩| 欧美久久久久久一卡四| 欧美va在线观看| 欧美成年人视频网站| 人妻精品一区一区三区蜜桃91| 欧美日韩在线影院| 青青青手机在线视频| 国产精品18久久久久久久久久久久| 青青青青在线视频| 亚洲人和日本人hd| 91久久国产精品| 嗯~啊~轻一点视频日本在线观看| 亚洲欧美中文字幕| 一级特黄aaa大片在线观看| 亚洲一区二区在线观看视频| 人妻少妇一区二区| 狠狠狠色丁香婷婷综合激情| 国产夫妻自拍一区| 欧美精品一二| av成人在线电影| 伊人久久高清| 欧美美女15p| 国产在线视频网| 日韩视频在线观看一区二区| 青青草成人av| 亚洲欧美韩国综合色| 日韩 中文字幕| 国产中文字幕一区| 男人日女人bb视频| 欧美在线精品一区| 午夜久久资源| 美国十次av导航亚洲入口| 国产精自产拍久久久久久| 嗯啊主人调教在线播放视频| www.日韩av.com| 免费一级在线观看| 精品国产百合女同互慰| 91无套直看片红桃| 色94色欧美sute亚洲13| 国产一级一片免费播放| 一色屋精品亚洲香蕉网站| 在线免费观看黄色小视频| 国产高清一区日本| 成年网站在线播放| 国产日韩欧美高清免费| 国产一二三区在线播放| 91亚洲一区| 日日夜夜精品网站| 欧美色资源站| 国产精品乱码| 麻豆一区在线| 国产日韩在线免费| 日韩三区免费| 热99久久精品| 九色porny丨入口在线| 九九热这里只有在线精品视| av在线播放网| 亚洲一品av免费观看| 天堂成人在线观看| 欧美v日韩v国产v| aaa国产视频| 宅男在线国产精品| 艳妇乳肉豪妇荡乳av| 在线观看视频一区二区欧美日韩| 日本在线视频免费| 亚洲福利一二三区| 豆国产97在线 | 亚洲| 一区二区欧美在线观看| 九九热只有精品| 亚洲欧美另类小说视频| 国产高潮流白浆| 一区二区三区在线观看视频| 青青草原国产视频| 一区二区三区视频在线看| 私库av在线播放| 一区二区三区精品| 国产精品999久久久| 亚洲.国产.中文慕字在线| 久久精品www人人爽人人| 亚洲国产人成综合网站| 日本一区二区三区四区五区| 五月天久久比比资源色| 啦啦啦免费高清视频在线观看| 天天综合色天天综合色h| 日韩乱码一区二区| 高跟丝袜欧美一区| 欧美一区免费看| 欧美视频在线播放| 国产麻豆免费观看| 欧美本精品男人aⅴ天堂| 熟妇人妻系列aⅴ无码专区友真希 熟妇人妻av无码一区二区三区 | 久久69精品久久久久久国产越南| 怡红院av在线| 久久久久亚洲精品国产| 国产不卡人人| 国产精品成人一区二区三区吃奶| 国产69精品久久久久9999人| 成人妇女免费播放久久久| 亚洲精品不卡在线观看| 国产日韩欧美二区| 国产精品欧美日韩一区| 正在播放一区| 在线精品一区| 国产福利影院在线观看| 久久成人免费网| 91超薄肉色丝袜交足高跟凉鞋| 成人小视频在线观看| a毛片毛片av永久免费| 中文字幕av资源一区| 中文字幕另类日韩欧美亚洲嫩草| 亚洲综合另类小说| 久久精品视频5| 欧美理论电影在线| 成人精品在线播放| 国产亚洲精品91在线| 色yeye免费人成网站在线观看| 欧美一区二区三区四区在线| 成人亚洲网站| 国产精品一区二区a| japanese国产精品| 国产精品免费看久久久无码| 免费亚洲婷婷| 91丝袜超薄交口足| 久久众筹精品私拍模特| 91n在线视频| 红桃视频成人在线观看| ,一级淫片a看免费| 精品视频www| jizz性欧美| 国产精品jvid在线观看蜜臀| 一区二区视频| 亚洲第一在线综合在线| 在线观看一区| 国内自拍第二页| 久久久精品黄色| 久久国产在线观看| 欧美男人的天堂一二区| 三级做a全过程在线观看| 欧美国产在线电影| 日韩三级成人| 图片区小说区区亚洲五月| 国产精品vip| 三年中国国语在线播放免费| 国产高清不卡二三区| 国产精品视频在| 色综合色狠狠天天综合色| 成 人片 黄 色 大 片| 最近2019年好看中文字幕视频 | 成人动漫在线播放| 91成人精品网站| 爱情电影网av一区二区| 天堂精品视频| 噜噜噜躁狠狠躁狠狠精品视频| 亚洲性图第一页| 亚洲视频一区在线观看| 亚洲性猛交富婆| 亚洲视频一区二区| 91av亚洲| 九九99久久| 99精品福利视频| 在线免费看黄色片| 一区二区三区四区乱视频| 97视频免费在线| xxxxx成人.com| 国产亚洲欧美日韩精品一区二区三区| 蜜桃导航-精品导航| 国产精品视频久久一区| 亚洲一级av无码毛片精品 | 男人天堂视频网| 亚洲美女中文字幕| 亚洲国产欧美日本视频| 久久综合一区| 亚洲欧美日韩国产综合精品二区| 精品无码国产一区二区三区51安| 亚洲线精品一区二区三区八戒| 亚洲成人久久精品| 久久久免费电影| av成人资源| 亚洲熟妇无码另类久久久| 91丨九色丨蝌蚪富婆spa| 亚洲黄色三级视频| 亚洲免费福利视频| 成人教育av| 亚洲成人18| 久草在线在线精品观看| 欧美人禽zoz0强交| 精品卡一卡二卡三卡四在线| 国产精品论坛| 欧美国产一区二区在线| 日韩精品亚洲一区| 亚洲少妇xxx| 欧美成人女星排名| 男女羞羞在线观看| 日本电影一区二区三区| 老司机精品视频一区二区三区| 开心激情五月网| 日韩欧美国产一区二区在线播放| heyzo中文字幕在线| 美乳视频一区二区| 美女视频一区二区三区| 一区视频免费观看| 亚洲成人在线网| 日韩一区二区三区免费视频| 老司机午夜网站| 99国产精品久久久| 在线免费观看日韩视频| 欧美猛少妇色xxxxx| 日韩在线影视| 日韩欧美亚洲另类| 亚洲国产精品影院| 91caoporn在线| 国产精品久久精品国产| 日日噜噜夜夜狠狠视频欧美人 | 伊人久久大香线蕉av超碰演员| 日韩免费高清一区二区| 在线精品视频一区二区三四| а√天堂在线官网| 欧美成熟毛茸茸复古| 精品无人区卡一卡二卡三乱码免费卡| 精品肉丝脚一区二区三区| 亚洲欧美变态国产另类| 国产精品美女久久久久人| 国产精品97在线| 亚洲精品乱码久久久久久久久 | 卡一精品卡二卡三网站乱码| 国产真人无码作爱视频免费| 樱花草国产18久久久久| 国产爆初菊在线观看免费视频网站| 亚洲已满18点击进入在线看片| 久久久久在线| 久草免费在线观看视频|