vue3+TS reactive設定類型方式
vue3+TS reactive設定類型
定義兩個接口,第一個接口限制對象屬性,第二個接口寫Data屬性
interface User { username: string | null; age: number | null; sex: string | null; } interface Userdata { data: [User]; } const userList = reactive<Userdata>({ data: [ { username: null, age: null, sex: null, }, ], });
vue中的Reactive,ref,readonly
一、Reactive api
下面我們可以一個例子
如圖所示,當我們點擊button
按鈕的時候,是沒有響應式效果的,此時我們需要reactive api
。
那么這是什么原因呢?為什么就可以變成響應式的呢:
因為當我們使用reactive函數(shù)處理我們的數(shù)據(jù)之后,數(shù)據(jù)再次被使用時就會進行依賴收集,當數(shù)據(jù)發(fā)生改變時,所有收集到的依賴都是進行對應的響應式操作,我們編寫的data選項,也是在內部交給了reactive函數(shù)將其編程響應式對象的。
二、Ref api
reactive api
對傳入的類型是有限制的,要求我們必須傳入一個對象或者數(shù)組,但是如果我們傳入基本數(shù)據(jù)類型的話,會報一個警告(String, Number, Boolean
)。
在template
模板中,vue會自動幫助我們解包,所以我們不需要使用ref.value
進行操作。
但是在setup
內部,vue不會幫助我們進行解包操作,此時我們需要使用ref.value
ref的解包只是淺層解包
如上述兩張圖所示,第一張圖,在ref
對象外層嵌套了一層普通對象,此時在template
中就必須加上value
才可以訪問。
在下面使用reactive
對象進行嵌套,此時不需要加value
也可以訪問。
三、readonly api
我們通過reative
和ref
獲取的響應式對象,但是在某一些情況下,我們希望這樣數(shù)據(jù)可以傳給其他組件,此時這些數(shù)據(jù)不能被修改,所以我們使用readonly
函數(shù)。
readonly
函數(shù)傳入對象后,返回結果為代理對象(proxy對象,該對象的set方法被劫持,不能進行修改)。
readonly常見的傳入對象
- 類型一:普通對象
- 類型二:reactive返回的對象
- 類型三:ref返回的對象
readonly返回的對象不允許修改,但是在readonly處理的原來的對象是允許被修改的。
readonly
對象的本質是:readonly
對象的返回結果的setter
被劫持。
上面的并沒有修改readonly
屬性的對象,所以可以在home組件中修改。
如上圖所示使用readonly
屬性的就不可以進行更改。
總結
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
webpack dev-server代理websocket問題
這篇文章主要介紹了webpack dev-server代理websocket問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-08-08vue-video-player 解決微信自動全屏播放問題(橫豎屏導致樣式錯亂問題)
這篇文章主要介紹了vue-video-player 解決微信自動全屏播放問題,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-02-02Vue.js實現(xiàn)大轉盤抽獎總結及實現(xiàn)思路
這篇文章主要介紹了 Vue.js實現(xiàn)大轉盤抽獎總結及實現(xiàn)思路,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下2019-10-10VUE中使用TypeScript裝飾器實現(xiàn)表單驗證的全過程
這篇文章主要給大家介紹了關于如何在VUE中使用TypeScript裝飾器實現(xiàn)表單驗證的相關資料,文中通過實例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2022-03-03