如何在vue3中同時(shí)使用tsx與setup語法糖
前言
想這樣做的原因是在vue3里使用tsx開發(fā)時(shí),props的聲明顯得異常麻煩,不禁想到defineProps的便利,但同時(shí)在vue3里tsx文件里tsx語法的書寫必須在setup函數(shù)或者render函數(shù)里,無法正常的使用defineProps等一系列的宏.為了能夠更加便利,使用了下文的方法.
Tsx與setup語法糖的優(yōu)勢
目前,在vue3中使用tsx已經(jīng)越來越流行且便捷,對于webpack與vite構(gòu)建的項(xiàng)目,都有很好的插件支持.tsx帶來的優(yōu)勢可能給我的感受最直接的就是更像是在寫js代碼.
同時(shí),vue3的setup語法糖的便利也深入人心,不需要return,不需要聲明components,并且提供了defineProps等等方便的宏.
遇到的問題
這是在用tsx編寫vue組件時(shí),遇到的props的問題,可以看到props的聲明占據(jù)了大量篇幅,同時(shí)type的寫法也比較復(fù)雜,如果在加上required字段,需要的篇幅會(huì)更大.
這樣聲明props的方式并不優(yōu)雅,所以想起了setup語法糖下的defineProps函數(shù).經(jīng)過測試,defineProps在非setup語法糖下無法使用,但使用setup語法糖,就不支持Tsx了.為了優(yōu)雅,于是采取了一個(gè)折中的辦法:
可以看到,文件還是.vue文件,在script標(biāo)簽里使用了lang="tsx"與 setup語法糖,這樣做的好處是,定義了一個(gè)props的inferface,直接就可以在defineProps的泛型處使用,同時(shí)表示是否必要(required)只需要使用ts中的?(可選屬性)即可.默認(rèn)屬性可以通過withDefaults實(shí)現(xiàn):
最后
最下面還是用到了template標(biāo)簽仿佛有點(diǎn)自欺欺人,同時(shí)在這種寫法下,vscode插件對于tsx標(biāo)簽的自動(dòng)補(bǔ)全并不友好,可能還需要更多的支持,但是這樣的props類型聲明確實(shí)更加優(yōu)雅,同時(shí)setup語法糖也是真香!
到此這篇關(guān)于如何在vue3中同時(shí)使用tsx與setup語法糖的文章就介紹到這了,更多相關(guān) vue3使用tsx與setup內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
如何通過Vue自帶服務(wù)器實(shí)現(xiàn)Ajax請求跨域(vue-cli)
從A頁面訪問到B頁面,并且要獲取到B頁面上的數(shù)據(jù),而兩個(gè)頁面所在的端口、協(xié)議和域名中哪怕有一個(gè)不對等,那么這種行為就叫跨域,這篇文章給大家介紹如何通過Vue自帶服務(wù)器實(shí)現(xiàn)Ajax請求跨域(vue-cli),感興趣的朋友一起看看吧2023-10-10vue3組件化開發(fā)之可復(fù)用性的應(yīng)用實(shí)例詳解
不斷把公共的、可以獨(dú)立拆分出來的抽出來作為一個(gè)獨(dú)立可復(fù)用的組件來向上提供調(diào)用,這樣讓我們的代碼更加方便組織和管理,并且擴(kuò)展性也更強(qiáng),下面這篇文章主要給大家介紹了關(guān)于vue3組件化開發(fā)之可復(fù)用性應(yīng)用的相關(guān)資料,需要的朋友可以參考下2022-06-06Vuex狀態(tài)機(jī)的快速了解與實(shí)例應(yīng)用
Vuex是專門為Vuejs應(yīng)用程序設(shè)計(jì)的狀態(tài)管理工具,這篇文章主要給大家介紹了關(guān)于Vuex狀態(tài)機(jī)快速了解與實(shí)例應(yīng)用的相關(guān)資料,需要的朋友可以參考下2021-06-06深入理解Vue的插件機(jī)制與install詳細(xì)
這篇文章主要介紹的是深入理解Vue的插件機(jī)制與install,文章主要是講解install函數(shù)可以做些什么、install內(nèi)部是怎么實(shí)現(xiàn)的、 Vuex,Vue-Router插件在install期間到底干了什么,需要的小伙伴可以參考一下2021-09-09