總結Vue建立響應式資料物件(reactive、ref、toRef、toRefs)
一、reactive
reactive
方法根據傳入的對象,建立傳回一個深度響應式物件(Proxy代理物件)。
reactive
會對傳入物件進行包裹,建立一個該物件的Proxy代理物件
。它是來源物件的響應式副本,不等於原始物件。它==“深層”==轉換了所有源物件的嵌套property(屬性)
,解包並維持其中的任何ref引用關係。
響應式物件屬性值改動,不管層級有多深,都會觸發響應式。新增和刪除屬性也會觸發響應式。
二、ref
ref
函數用來將一項資料包裝成一個響應式 ref 物件。它接收任意資料型別的參數,作為這個 ref 物件 內部的 value property
的值。
產生值類型資料(
String
#,Number
,Boolean
,Symbol
)的響應式物件可以用
ref物件.value
存取或更改這個值。產生物件與陣列型別的回應式物件(物件與陣列一般不選用ref方式,而選用reactive方式,比較便捷)
#三、reactive對比ref
-
從定義資料角度比較:
- ##ref用來定義:
任意資料型別
- reactive用來定義:
物件(或陣列)類型資料
- ##ref用來定義:
如何選擇ref 和reactive?建議:
- 基礎型別值(String,Number,Boolean,Symbol) 或單值物件(類似{ count: 1 }這樣只有一個屬性值的物件) 使用ref
- 引用型別值(Object、Array)使用reactive
- 從原理角度比較:
- ref透過
Object.defineProperty()
的
get和
set#來實作回應式(資料劫持)。
- reactive透過使用
Proxy
來實現響應式(資料劫持),並透過
Reflect操作
來源物件內部的資料
- ref透過
- 從使用角度比較:
- ref定義的資料:存取或更改資料需要
- .value
- .value
。
- .value
- #針對一個響應式物件(reactive封裝)的prop(屬性)建立一個ref,並且保持回應式
- 兩者保持引用關係
const 屬性名稱= toRef(物件,'屬性名稱')
所有屬性轉換為ref 的實用方法
- 將響應式物件(reactive封裝)轉換成普通物件
- #物件的每個屬性(Prop)都是對應的ref
- #兩者保持引用關係
const 屬性名稱= toRefs(物件,'屬性名稱')
注意:reactive封裝的響應式對象,不要直接透過解構的方式return,這是不具有響應式的。
const state = reactive({ age: 20, name: 'zhangsan'}); return {...state}; // 错误的方式,会丢失响应式 return toRefs(state); // 正确的方式 //最佳方式 return ...toRefs(state)//将对象的各个属性的ref解构到对象根下面。
為什麼有了reactive函數還需要ref函數呢?當我們只想讓某個變數實現響應式的時候,採用reactive就會比較麻煩,因此vue3提供了ref方法進行簡單值的監聽,但並不是說ref只能傳進入簡單值,他的底層是reactive,所以reactive有的,它都有。
記得:ref本質也是reactive,ref(obj)等價於reactive({value: obj})
vue.js影片教學】
以上是總結Vue建立響應式資料物件(reactive、ref、toRef、toRefs)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)