vue3中reactive注意點(系列四)

2022-06-16 21:18:08 字數 2025 閱讀 3021

基本型別(數字、字串、布林值)在reactive中無法被建立成proxy物件,也就無法實現監聽。無法實現響應式

點選 button ,我們期望的結果是數字從 0 變成 1,然而實際上介面上的數字並沒有發生任何改變。

檢視控制台,它的輸出是這樣的(我點了 3 次)

出現提示

value cannot be made reactive: 0

而輸出的值確實發生了變化,只不過這種變化並沒有反饋到介面上,也就是說並沒有實現雙向資料繫結。當然,如果是ref的話,就不存在這樣的問題。而如果要使用reactive,我們需要將引數從 基本型別 轉化為 物件。

}"c

">button

將引數替換成了物件,此時,點選按鈕介面就會產生改變(我點了 3 次)。

在控制台列印訊息

可以看到,msg成功被建立成了proxy物件,他通過劫持物件的getset方法實現了物件的雙向資料繫結。

深層的、物件內部的變化也能被察覺到(注意下面**中的inner

陣列變化也不在話下。

如果引數不是陣列、物件,而是稍微奇怪一點的資料型別,例如說date,那麼麻煩又來了。

這裡我先列印了msg兩次,可以看到,點選一次 button ,msg的資料是存在變化的,但介面並未發生變化,同時我們發現在控制台裡,msg並未被識別成proxy

就算我們把date放在物件裡,就像這樣

}"c

">button

也仍然不起效果。

顯然,對於這種資料型別,我們需要做特殊處理。

這個特殊處理就是重新賦值(,而不是直接修改原來的值)。

}"c

">button

這裡我採用了拷貝的方案重新賦值了msg.date,介面成功發生了變化(日期 + 1)。

vue3中使用reactive替代vuex

在vuex用於存放公用的資料和方法,並且資料改變可以實現檢視更新。但是使用也是很麻煩同步的要使用mutations,非同步的要使用actions,而且只能通過commit來更新資料。下面來實現這樣乙個常見功能,登入的時候儲存使用者名稱,在內容頁的頭部顯示使用者名稱 user.ts用來存放user資料...

快速了解vue(3)

上次我們說到了.vue檔案,那麼這是個什麼檔案呢?啥也不是,就是個vue元件。我們都說要元件化,模組化什麼的,這.vue檔案就是個元件,開啟看看就知道了,它這裡有兩個,主要的標籤,乙個是,乙個是。這些我們肯定看得懂,標籤裡是寫html的,頁面就是由這許許多多的元件拼出來的,就像拼圖似的,想要修改頁面...

vue3學習筆記

vue3 1.context.emit update xx props.xx 可 v model xx更新xx的值 個人記憶,雙向繫結 需要雙向改變的值 代替 vue2 sync 2.元件上繫結的事件預設是繫結第一層,可使用inheritattrs false 取消預設,在需要繼承的屬性的標籤使用v...