Vue API中setup ref reactive函數(shù)使用教程
1.setup
組件中所用到的:數(shù)據(jù)、方法等等,均要配置在setup中
setup函數(shù)的兩種返回值:
若返回一個對象,則對象中的屬性、方法, 在模板中均可以直接使用。(重點(diǎn)注意)
若返回一個渲染函數(shù):則可以自定義渲染內(nèi)容。
注意:
vue2可以讀取vue3里面的數(shù)據(jù)
如果 vue2和vue3沖突,會用vue3的,所以
盡量不要與Vue2.x配置混用
- Vue2.x配置(data、methos、computed…)中可以訪問到setup中的屬性、方法
- 但在setup中不能訪問到Vue2.x配置(data、methods、computed…)
- 如果有重名, setup優(yōu)先
setup不能是一個async函數(shù),因為返回值不再是return的對象, promise,
模板看不到return對象中的屬性
2.ref函數(shù)
可以定義一個響應(yīng)式的數(shù)據(jù)
語法: const xxx = ref(initValue)
- JS中操作時:
xxx.value - 模板中讀取數(shù)據(jù): 不需要.value,直接:
<div>{{xxx}}</div>
注:
- 接收的數(shù)據(jù)可以是:基本類型、也可以是對象類型
- 基本類型的數(shù)據(jù):響應(yīng)式依然是靠
Object.defineProperty()的get與set完成的
3.reactive函數(shù)
一個對象類型的響應(yīng)式數(shù)據(jù)(基本類型不要用它,要用ref函數(shù))
const 代理對象= reactive(源對象)接收一個對象(或數(shù)組),返回一個代理對象(Proxy的實例對象,簡稱proxy對象)
4.Vue3.0中的響應(yīng)式原理
vue2.x的響應(yīng)式
對象類型:通過Object.defineProperty()對屬性的讀取、修改進(jìn)行攔截(數(shù)據(jù)劫持)
數(shù)組類型:通過重寫更新數(shù)組的一系列方法來實現(xiàn)攔截
Object.defineProperty(data, 'count', {
get () {},
set () {}
})
但是存在一些問題: 新增屬性、刪除屬性, 界面不會更新; 直接通過下標(biāo)修改數(shù)組, 界面不會自動更新。
Vue3.0的響應(yīng)式
- 通過Proxy(代理): 攔截對象中任意屬性的變化, 包括:屬性值的讀寫、屬性的添加、屬性的刪除等
- 通過Reflect(反射): 對源對象的屬性進(jìn)行操作
new Proxy(data, {
// 攔截讀取屬性值
get (target, prop) {
return Reflect.get(target, prop)
},
// 攔截設(shè)置屬性值或添加新屬性
set (target, prop, value) {
return Reflect.set(target, prop, value)
},
// 攔截刪除屬性
deleteProperty (target, prop) {
return Reflect.deleteProperty(target, prop)
}
})
proxy.name = 'tom'
5.reactive對比ref
從定義數(shù)據(jù)角度對比:
- ref用來定義:基本類型數(shù)據(jù)。
- reactive用來定義:對象(或數(shù)組)類型數(shù)據(jù)。
- ref也可以用來定義對象(或數(shù)組)類型數(shù)據(jù), 它內(nèi)部會自動通過
reactive轉(zhuǎn)為代理對象
從原理角度對比:
- ref通過
Object.defineProperty()的get與set來實現(xiàn)響應(yīng)式 - reactive通過使用Proxy來實現(xiàn)響應(yīng)式(數(shù)據(jù)劫持), 并通過Reflect操作源對象內(nèi)部的數(shù)據(jù)
從使用角度對比:
- ref定義的數(shù)據(jù):操作數(shù)據(jù)需要
.value,讀取數(shù)據(jù)時模板中直接讀取不需要.value - reactive定義的數(shù)據(jù):操作數(shù)據(jù)與讀取數(shù)據(jù):均不需要
.value
到此這篇關(guān)于Vue API中setup ref reactive函數(shù)使用教程的文章就介紹到這了,更多相關(guān)Vue setup ref reactive內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
vue 設(shè)置proxyTable參數(shù)進(jìn)行代理跨域
這篇文章主要介紹了vue 設(shè)置proxyTable參數(shù)進(jìn)行代理跨域的相關(guān)資料,及代理跨域的概念原理,需要的朋友可以參考下2018-04-04
教你使用vue-autofit 一行代碼搞定自適應(yīng)可視化大屏
這篇文章主要為大家介紹了使用vue-autofit 一行代碼搞定自適應(yīng)可視化大屏教程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-05-05
Vue.js遞歸組件實現(xiàn)組織架構(gòu)樹和選人功能
這篇文章主要介紹了Vue.js遞歸組件實現(xiàn)組織架構(gòu)樹和選人功能,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-07-07
Vue實現(xiàn)微信小程序中預(yù)覽文件的縮放功能
在微信小程序中,默認(rèn)情況下,文件預(yù)覽功能不支持文檔縮放,導(dǎo)致用戶在遇到小字體時難以清晰閱讀,為了解決這一問題并提升用戶體驗,實現(xiàn)文檔的縮放功能至關(guān)重要,所以本文2024-12-12
vue使用Element組件時v-for循環(huán)里的表單項驗證方法
這篇文章主要介紹了vue使用Element組件時v-for循環(huán)里的表單項驗證方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-06-06

