vue3 Typescript學習筆記 二

2021-10-12 16:01:59 字數 4631 閱讀 6180

上節課的**可以說沒什麼章法可言,所有的變數和方法都混淆在一起,我最不能忍受的是在setup中要改變和讀取乙個值的時候,還要加上value。這種**一定是可以優化的,需要引入乙個新的 apireactive。它也是乙個函式(方法),只不過裡邊接受的引數是乙個 object(物件)。

然後無論是變數和方法,都可以作為 object 中的乙個屬性,而且在改變selectgirl值的時候也不用再加討厭的value屬性了。再return返回的時候也不用乙個個返回了,只需要返回乙個data,就可以了。

lang

="ts"

>

import

from

"vue"

;export

default,}

);return;}

,};script

>

修改完成部分的**後,還需要修改template部分的**,因為我們這時候返回的只有data,所以模板部分的字面量前要加入data。

>

alt=

"vue logo"

src="./assets/logo.png"

/>

>

>

歡迎光臨紅浪漫洗浴中心h2

>

>

請選擇一位美女為你服務div

>

div>

>

v-for

="(item, index) in data.girls"

v-bind:key

="index"

@click

="data.selectgirlfun(index)"

>

} : }

button

>

div>

>

你選擇了【}】為你服務div

>

template

>

這個修改完成後,可以在terminal終端裡開啟yarn serve,檢視一下效果了,如果沒有錯誤,應該和原來的效果一樣。效果雖然一樣,但是這時候**,要比上節課優雅了很多。著一些的功勞要歸屬於reactive函式。

給 data 增加型別註解

這時的**雖然可以完美的執行,但是細心的小夥伴可以發現data這個變數,我們並沒有作型別註解,而是採用了typescript的型別推斷。

這樣的**,在我們公司是不允許出現的,必須要增加型別註解。所以我們先定義乙個介面,用介面(inte***ce)來作型別註解。

inte***ce

dataprops

編寫完成後,你在顯示的為 data 變數作乙個型別註解.

cosnt data: dataprops =

...

用 torefs()繼續優化

現在template中,每次輸出變數前面都要加乙個data,這是可以優化的。有的小夥伴說了,我用…擴充套件運算子就可以解決這個問題了。

在這裡我就可以告訴你不行,因為結構後就變成了普通變數,不再具有響應式的能力。所以要解決這個問題,需要使用 vue3 的乙個新函式torefs()。使用前需要先進行引入。

import

from

"vue"

;

引入後就可以對data進行包裝,把 data 變成refdata,這樣就可以使用擴充套件運算子的方式了。具體**如下:

export

default

;const data: dataprops =

reactive(,

});const refdata =

torefs

(data)

;return;}

,};

這樣寫之後,你的template就應該去掉 data,而是直接使用變數名和方法,就可以了。

>

alt=

"vue logo"

src="./assets/logo.png"

/>

>

>

歡迎光臨紅浪漫洗浴中心h2

>

>

請選擇一位美女為你服務div

>

div>

>

v-for

="(item, index) in girls"

v-bind:key

="index"

@click

="selectgirlfun(index)"

>

} : }

button

>

div>

>

你選擇了【}】為你服務div

>

template

>

如何選擇 ref()和 reactive()

網路上對這兩個方法的爭論還是不少的,但到目前為止,還沒有什麼實質性的理論到底是用ref()好,還是reactive()好,也就是兩種方法都可以。他們的作用都是生成響應式物件,目前來看只是編寫上有所不同。

我個人更傾向於使用reactive(),因為它讓程式看起來更規範。如果你學到這裡還猶豫不定,也沒關係,隨著你進一步的深入學習,一定會有你自己的最佳選擇。

vue3 版本的生命週期和 vue2 比有了些變化,所以我先站在乙個初學者的角度(沒有學過 vue2 版本的新手),從新講一下 vue3.x 的生命週期,等你完全理解之後,我們再來和 vue2.x 的生命週期作乙個對比。

什麼是生命週期

vue 是元件化程式設計,從乙個元件誕生到消亡,會經歷很多過程,這些過程就叫做生命週期。

來個比喻,生命週期和人從出生到入土是一樣的。有少年時期、有青年時期、有中年時期、有老年時期。每個時期都應該有不同的任務,可以作不同的事。

當你理解了什麼是生命週期,你還了解乙個概念「鉤子函式」。

setup() :開始建立元件之前,在beforecreate和created之前執行。建立的是data和method

onbeforemount() : 元件掛載到節點上之前執行的函式。

onmounted() : 元件掛載完成後執行的函式。

onbeforeupdate(): 元件更新之前執行的函式。

onupdated(): 元件更新完成之後執行的函式。

onbeforeunmount(): 元件解除安裝之前執行的函式。

onunmounted(): 元件解除安裝完成後執行的函式

onactivated(): 被包含在>

中的元件,會多出兩個生命週期鉤子函式。被啟用時執行。

ondeactivated(): 比如從 a 元件,切換到 b 元件,a 元件消失時執行。

onerrorcaptured(): 當捕獲乙個來自子孫元件的異常時啟用鉤子函式(以後用到再講,不好展現)。

vue3.x 生命週期在呼叫前需要先進行引入,我們先暫時演示前五個生命週期。

import

from

"vue"

;

先來說setup(),setup 這個函式是在beforecreate和created之前執行的,所以你可以用它來代替這兩個鉤子函式。

為了看出鉤子函式執行的時機,我在setup()函式裡,編寫了下面的**:

lang

="ts"

>

//....,}

);onbeforemount((

)=>);

onmounted((

)=>);

onbeforeupdate((

)=>);

onupdated((

)=>);

const refdata =

torefs

(data)

;return;}

,};export

script

>

寫完後可以到瀏覽器看一下效果,效果和你想象的應該是一樣的。

1 - 開始建立元件---- - setup();

2 - 元件掛載到頁面之前執行---- - onbeforemount();

3 - 元件掛載到頁面之後執行---- - onmounted();

4 - 元件更新之前---- - onbeforeupdate();

5 - 元件更新之後---- - onupdated();

你這時候一定會有個疑問,那vue2.x版本的生命週期函式還可以使用嗎?答案是肯定的。

你可以在setup()函式之後編寫vue2的生命週期函式,**如下:

beforecreate()

,beforemount()

,mounted()

,beforeupdate()

,updated()

,

這時候可以看到,原來的生命週期也是完全可以使用。

TypeScript在Vue中的嘗試

vue官方文件中,對typescript做支援,目前我們可以使用typescript的語法,進行vue專案的開發。這個外掛程式是vue官方維護的外掛程式,目前支援基於class的語法規則。1 直接在類中申明data資料。舊的方式 export default 使用class的方式 import co...

3 typescript類的定義

一 ts中定義類 class person run void var p new person 張三 p.run 二 ts中實現繼承 extends super class person run string在運動 var p new person 王五 alert p.run class web ...

3 typeScript中的函式

函式的定義 es5的定義 方法 函式宣告法 function run 函式表示式 var run2 function ts中定數的方法 函式宣告法 function run string 錯誤寫法 function run2 string 函式表示式 var fun2 function number...