目錄
一、reactive
二、ref
#三、reactive對比ref
首頁 web前端 Vue.js 總結Vue建立響應式資料物件(reactive、ref、toRef、toRefs)

總結Vue建立響應式資料物件(reactive、ref、toRef、toRefs)

Aug 09, 2022 pm 02:56 PM
vue

一、reactive

reactive方法根據傳入的對象,建立傳回一個深度響應式物件(Proxy代理物件)。

reactive 會對傳入物件進行包裹,建立一個該物件的
Proxy代理物件。它是來源物件的響應式副本,不等於原始物件。它==“深層”==轉換了所有源物件的嵌套property(屬性)
,解包並維持其中的任何ref引用關係。

響應式物件屬性值改動,不管層級有多深,都會觸發響應式。新增和刪除屬性也會觸發響應式。

二、ref

ref 函數用來將一項資料包裝成一個響應式 ref 物件。它接收任意資料型別的參數,作為這個 ref 物件 內部的 value property 的值。

  • 產生值類型資料(String#,NumberBooleanSymbol)的響應式物件

  • 可以用ref物件.value存取或更改這個值。

  • 產生物件與陣列型別的回應式物件(物件與陣列一般不選用ref方式,而選用reactive方式,比較便捷)

#三、reactive對比ref

  • 從定義資料角度比較:

    • ##ref用來定義:

      任意資料型別

    • reactive用來定義:

      物件(或陣列)類型資料

如何選擇ref 和reactive?建議:

  • 基礎型別值(String,Number,Boolean,Symbol) 或單值物件(類似{ count: 1 }這樣只有一個屬性值的物件) 使用ref

  • 引用型別值(Object、Array)使用reactive

  • 從原理角度比較:

    • ref透過

      Object.defineProperty()getset#來實作回應式(資料劫持)。

    • reactive透過使用

      Proxy來實現響應式(資料劫持),並透過Reflect操作來源物件內部的資料

  • 從使用角度比較:

      ref定義的資料:存取或更改資料需要
    • .value
    • reactive定義的資料:操作資料與讀取資料皆不需要
    • .value
四、toRef

  • #針對一個響應式物件(reactive封裝)的prop(屬性)建立一個ref,並且保持回應式

  • 兩者保持引用關係

#語法:

const 屬性名稱= toRef(物件,'屬性名稱')

五、toRefs

toRefs 是一種用於破壞響應式物件並將其

所有屬性轉換為ref 的實用方法

  • 將響應式物件(reactive封裝)轉換成普通物件

  • #物件的每個屬性(Prop)都是對應的ref

  • #兩者保持引用關係

語法:

const 屬性名稱= toRefs(物件,'屬性名稱')

注意:reactive封裝的響應式對象,不要直接透過解構的方式return,這是不具有響應式的。

可以透過toRefs 處理,然後再解構返回,這樣才具有響應式

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中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前 By 尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

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

vue中echarts怎麼用 vue中echarts怎麼用 May 09, 2024 pm 04:24 PM

vue中echarts怎麼用

vue中的export default的作用 vue中的export default的作用 May 09, 2024 pm 06:48 PM

vue中的export default的作用

vue中map函數的用法 vue中map函數的用法 May 09, 2024 pm 06:54 PM

vue中map函數的用法

vue中event和$event區別 vue中event和$event區別 May 08, 2024 pm 04:42 PM

vue中event和$event區別

vue中onmounted作用 vue中onmounted作用 May 09, 2024 pm 02:51 PM

vue中onmounted作用

vue中export與export default區別 vue中export與export default區別 May 08, 2024 pm 05:27 PM

vue中export與export default區別

vue中的鉤子是什麼 vue中的鉤子是什麼 May 09, 2024 pm 06:33 PM

vue中的鉤子是什麼

vue中的onmounted對應react哪個生命週期 vue中的onmounted對應react哪個生命週期 May 09, 2024 pm 01:42 PM

vue中的onmounted對應react哪個生命週期

See all articles