基本型別(數字、字串、布林值)在reactive
中無法被建立成proxy
物件,也就無法實現監聽。無法實現響應式
點選 button ,我們期望的結果是數字從 0 變成 1,然而實際上介面上的數字並沒有發生任何改變。
檢視控制台,它的輸出是這樣的(我點了 3 次)
出現提示
value cannot be made reactive: 0而輸出的值確實發生了變化,只不過這種變化並沒有反饋到介面上,也就是說並沒有實現雙向資料繫結。當然,如果是
ref
的話,就不存在這樣的問題。而如果要使用reactive
,我們需要將引數從 基本型別 轉化為 物件。
}"c將引數替換成了物件">button
,此時,點選按鈕介面就會產生改變(我點了 3 次)。
在控制台列印訊息
可以看到,msg
成功被建立成了proxy
物件,他通過劫持物件的get
和set
方法實現了物件的雙向資料繫結。
深層的、物件內部的變化也能被察覺到(注意下面**中的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...