精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

精品亚洲永久免费精品| 亚洲午夜一区二区三区| 国产精品久久久久久久美男| 日本精品久久久久中文| 四虎精品在线观看| 亚洲影视在线观看| 日韩性感在线| 国产又色又爽又黄又免费| 在线播放日韩| 在线国产精品播放| 亚洲欧美日韩中文字幕在线观看| 欧美sm一区| 亚洲婷婷综合久久一本伊一区| 92看片淫黄大片看国产片| 国产成人在线观看网站| 欧美三级美国一级| 精品久久久久久最新网址| 成年人在线看片| www.在线视频| 国产三级一区二区| 国产精品久久精品视| 中文字幕 欧美激情| 亚洲欧洲日本mm| 久久久国产91| 国产18无套直看片| 台湾佬综合网| 精品成人免费观看| 视频区 图片区 小说区| 婷婷六月国产精品久久不卡| 亚洲第一福利视频在线| 小说区视频区图片区| 亚州av在线播放| 国产福利精品一区| 国产精品视频白浆免费视频| 999这里只有精品| 一区二区视频欧美| 欧美成在线观看| 欧美激情久久久久久久| 免费欧美视频| 亚洲欧美日韩一区二区三区在线| 香蕉视频免费网站| 电影中文字幕一区二区| 欧美人狂配大交3d怪物一区| 欧美精品成人网| 超碰国产一区| 狠狠躁夜夜躁人人躁婷婷91 | 51ⅴ精品国产91久久久久久| 欧洲猛交xxxx乱大交3| 久久在线免费| 国产一区二区三区在线观看视频| 黄色国产在线观看| 久久夜色电影| 亚洲精品第一国产综合精品| 无码人妻精品一区二区三区99不卡| 不卡精品视频| 欧美大胆一级视频| 在线播放第一页| www.丝袜精品| 精品卡一卡二卡三卡四在线| 91亚洲一线产区二线产区| 欧美视频二区欧美影视| 日韩视频不卡中文| 精品国产一二区| 老司机在线精品视频| 亚洲成色777777女色窝| 在线观看国产三级| 亚洲丝袜美腿一区| 中文字幕av一区二区三区谷原希美| xxxx日本免费| 欧美激情电影| 欧美另类交人妖| 国产一级淫片免费| 国产欧美综合一区二区三区| 欧美一区深夜视频| 波多野结衣电车痴汉| 美腿丝袜亚洲三区| 5g国产欧美日韩视频| 国产 日韩 欧美 精品| 91免费视频网址| 亚州欧美一区三区三区在线 | 日本新janpanese乱熟| 97人人做人人爽香蕉精品| 欧美日韩aaaaaa| 少妇伦子伦精品无吗| 天天躁日日躁成人字幕aⅴ| 国产一区二区动漫| 男女免费视频网站| 久久不射网站| 91免费看片在线| 天堂资源最新在线| 中文字幕一区二区在线播放| 隔壁人妻偷人bd中字| 视频一区在线免费看| 日韩欧美一卡二卡| 白白色免费视频| 欧美黄免费看| 国产精品日韩久久久久| 亚洲av无码一区二区三区性色| 97久久久精品综合88久久| 午夜精品福利一区二区| 国产偷倩在线播放| 欧美日精品一区视频| 蜜臀aⅴ国产精品久久久国产老师| 精品影片在线观看的网站| 久久不射电影网| 日本中文字幕在线| 国产精品99久久久久久似苏梦涵 | 精品久久久免费| 国内av一区二区| 欧美日韩高清| 2018中文字幕一区二区三区| 99视频在线观看免费| 久久精品夜色噜噜亚洲aⅴ| 视色,视色影院,视色影库,视色网| 亚洲欧美韩国| 精品久久国产97色综合| 99精品中文字幕| 免费中文字幕日韩欧美| 不卡视频一区| 在线黄色网页| 欧美日韩在线播放三区| 播金莲一级淫片aaaaaaa| 91精品动漫在线观看| 国产精品白嫩初高中害羞小美女| 欧美视频一二区| 亚洲精品视频免费看| 欧美大尺度做爰床戏| 亚洲影院天堂中文av色| 高清欧美一区二区三区| aaa级黄色片| 亚洲视频免费在线观看| 亚洲天堂2018av| 国产精品一区高清| 日本在线观看天堂男亚洲| 蜜桃久久一区二区三区| 一区二区三区中文免费| 捷克做爰xxxⅹ性视频| 久久影院一区| 91精品久久久久久久久中文字幕| 成人高清在线| 欧美午夜影院一区| 国产综合精品久久久久成人av| 羞羞视频在线观看欧美| 噜噜噜噜噜久久久久久91| freexxx性亚洲精品| 日韩欧美在线网站| 国产suv一区二区三区| 狠狠狠色丁香婷婷综合激情| 伊人色综合影院| gogo大尺度成人免费视频| www.欧美精品一二三区| 91精品国产乱码久久| 国产精品久久久久影视| 亚洲这里只有精品| 国产精品国产一区| 91久久久精品| 青青草视频在线免费直播| 精品欧美一区二区久久 | 色综合久久久久综合体| a级大片在线观看| 日韩精品高清不卡| 亚洲精品国产精品久久 | 国产经典一区二区三区| h片在线观看| 亚洲欧美日本精品| 亚洲视频一区在线播放| 亚洲欧美国产三级| 中文字幕99页| 久久精品国语| 一区二区三区四区五区视频 | 正在播放亚洲一区| 久久久国产成人| 91麻豆.com| 污视频网站观看| 欧美视频久久| 欧美精品亚洲| 成人网av.com/| 久久久影视精品| 你懂的在线观看| 欧美日韩久久不卡| 免费网站看av| 久久伊人中文字幕| 午夜视频在线观| 99成人精品| 一区二区三区av| 国内精品麻豆美女在线播放视频 | 日韩第一区第二区| 91a在线视频| 麻豆网在线观看| 亚洲精品动漫100p| 国产一区二区在线播放视频| 亚洲成人av电影| 国产欧美小视频| 成人av在线电影| jizz欧美性11| 亚洲第一黄网| 一区二区精品免费视频| 四虎影视精品| 91嫩草国产在线观看| 韩日成人影院| 久久99精品视频一区97 | 国产欧美一区二区三区精品酒店| 亚洲人a成www在线影院| av加勒比在线| 欧美图区在线视频| 国产a∨精品一区二区三区仙踪林| 国产欧美综合色| www国产视频| 九色porny丨国产精品| 国产在线观看福利| 亚洲视频综合| 黄色a级在线观看| 精品精品99| 久久综合九色综合久99| 日韩一区二区三区在线看| 国产精品日韩在线播放| av成人 com a| 久久99热这里只有精品国产| 69av亚洲| 中文字幕久热精品视频在线| 污污网站在线免费观看| 日韩美女一区二区三区四区| 中文字幕乱码一区二区| 一本久道中文字幕精品亚洲嫩| 国产一级淫片免费| 一区二区欧美精品| 美女的奶胸大爽爽大片| 中文字幕中文在线不卡住| 亚洲精品国产91| 久久综合成人精品亚洲另类欧美| 少妇伦子伦精品无吗| 国产精品一级片| 国产成人强伦免费视频网站| 美国av一区二区| 国产又大又黄又猛| 免费在线观看日韩欧美| 欧美视频免费看欧美视频| 国产精品第十页| 成人在线视频一区二区三区 | 丁香六月激情网| 欧美视频一区| av一区二区三区免费观看| 欧美精品不卡| 亚洲熟妇无码一区二区三区导航| 欧美人与禽猛交乱配视频| 国产欧美123| 黄色工厂这里只有精品| bt天堂新版中文在线地址| 中文不卡在线| av日韩在线看| 一区二区三区精品视频在线观看| 日本午夜激情视频| 免费国产自线拍一欧美视频| 国产黄色特级片| 蜜桃视频一区二区| 黄色三级视频在线播放| 国产一区二区视频在线| 午夜诱惑痒痒网| 成人sese在线| 亚洲第一黄色网址| 国产午夜亚洲精品理论片色戒| 公肉吊粗大爽色翁浪妇视频| 国产精品传媒视频| 欧美成人免费观看视频| 亚洲国产精品视频| 日本中文在线播放| 欧美性一二三区| 国产精品一二三四五区| 精品国产伦一区二区三区观看方式| 午夜av免费在线观看| 国产亚洲欧洲高清| av片在线观看免费| 97成人在线视频| 国产精品原创视频| 国产精品视频免费一区| 欧美人妖在线| 国产福利片一区二区| 亚洲国产精品一区制服丝袜| 少妇高清精品毛片在线视频| 精品一区二区三区免费| 精品人妻伦一二三区久| 亚洲国产高清在线| 久久久久久久久久久久国产| 色综合天天综合网天天狠天天 | √天堂中文官网8在线| 亚洲成国产人片在线观看| 无码aⅴ精品一区二区三区| 91精品啪在线观看国产60岁| 天天操天天干天天操| 中文字幕在线观看日韩| 久久久久黄久久免费漫画| 日韩av大片在线| 香蕉大人久久国产成人av| 欧美二区三区在线| 欧美视频成人| 日本国产一级片| 91女神在线视频| 欧美日韩精品亚洲精品| 色视频成人在线观看免| 亚洲精品久久久久久久久久| 伊人男人综合视频网| av老司机免费在线| 成人动漫网站在线观看| 亚洲丝袜美腿一区| 男人插女人视频在线观看| 久久se这里有精品| 亚洲性猛交xxxx乱大交| 亚洲mv大片欧洲mv大片精品| 97av免费视频| 亚洲天堂av在线免费| 97天天综合网| 亚洲综合小说区| 久久视频在线| 已婚少妇美妙人妻系列| fc2成人免费人成在线观看播放| 日本 欧美 国产| 在线观看网站黄不卡| 日中文字幕在线| 91国产高清在线| 99a精品视频在线观看| 熟女视频一区二区三区| 免费在线观看不卡| 91激情视频在线观看| 午夜成人免费视频| 欧美 日韩 人妻 高清 中文| 久久成年人免费电影| 亚洲网站三级| 一区二区三区视频在线播放| 视频在线在亚洲| 亚洲第一页av| 色综合咪咪久久| 青青国产在线| 全球成人中文在线| 亚瑟一区二区三区四区| 免费一级特黄毛片| www.成人在线| 国产污污视频在线观看| 亚洲国产高清福利视频| www在线观看黄色| 国产乱码精品一区二区三区卡| 国模吧视频一区| 中文在线观看免费视频| 午夜一区二区三区在线观看| 男人天堂一区二区| 91极品视频在线| 亚洲影院天堂中文av色| 中文字幕欧美人妻精品一区| 国产日韩成人精品| 中文字幕日韩国产| 日韩有码在线播放| 国产亚洲字幕| 亚洲中文字幕无码一区二区三区| 国产aⅴ综合色| 日韩欧美国产亚洲| 亚洲女同性videos| a成人v在线| 久久久久久久久影视| 国产91精品露脸国语对白| 日韩欧美一区二区一幕| 日韩精品极品在线观看播放免费视频 | 国偷自产av一区二区三区| 成人毛片一区二区| 久久网这里都是精品| 中文字幕一级片| 久久精品国产欧美亚洲人人爽| 国产精品国产亚洲精品| 成人免费观看在线| 久久嫩草精品久久久久| 中文字幕视频在线播放| 欧美成人高清视频| 久久精品凹凸全集| 五月天婷婷亚洲| 亚洲一二三四区| 国产精品一级伦理| 亚洲最大的成人网| 一本一本久久| 日本不卡一区视频| 精品盗摄一区二区三区| 黄瓜视频成人app免费| 妞干网这里只有精品| 99国产精品99久久久久久| 中文字幕日本人妻久久久免费 | 六九午夜精品视频| 国产女教师bbwbbwbbw| 久久久久久久久久久久久夜| 国产免费叼嘿网站免费| 欧美一区二区三区精品电影| 亚洲成人精品| 黄色a一级视频| 91精品国产全国免费观看| 人成在线免费网站| 老司机av福利| 久久久www成人免费无遮挡大片| 97在线视频人妻无码| 2019中文在线观看| 中文字幕一区二区三区久久网站| 99久久人妻无码中文字幕系列| 欧美日韩大陆一区二区| 一区二区精品伦理...| 成人在线观看毛片|