vue3?中ref和reactive的區(qū)別講解
1. ref和reactive區(qū)別:
如果在template里使用的是ref類(lèi)型的數(shù)據(jù), 那么Vue會(huì)自動(dòng)幫我們添加.value
如果在template里使用的是reactive類(lèi)型的數(shù)據(jù), 那么Vue不會(huì)自動(dòng)幫我們添加.value
2. Vue是如何決定是否需要自動(dòng)添加.value的
Vue在解析數(shù)據(jù)之前, 會(huì)自動(dòng)判斷這個(gè)數(shù)據(jù)是否是ref類(lèi)型的,
如果是就自動(dòng)添加.value, 如果不是就不自動(dòng)添加.value
3. Vue是如何判斷當(dāng)前的數(shù)據(jù)是否是ref類(lèi)型的
通過(guò)當(dāng)前數(shù)據(jù)的__v_ref來(lái)判斷的
如果有這個(gè)私有的屬性, 并且取值為true, 那么就代表是一個(gè)ref類(lèi)型的數(shù)據(jù)
數(shù)據(jù)是ref類(lèi)型
<template> <div> <p>{{ age }}</p> <button @click="Fn">按鈕</button> </div> </template> <script> import { ref } from "vue"; export default { name: "App", setup() { // ref類(lèi)型在底層會(huì)自動(dòng)轉(zhuǎn)換成reactive類(lèi)型 // ref(18) -> reactive({value: 18}) let age = ref(18); function Fn() { age.value = 666; console.log(age) } return { age, Fn }; }, }; </script>
點(diǎn)擊按鈕,頁(yè)面數(shù)據(jù)變成666了,注意,vue模板中沒(méi)有age.value,因?yàn)閞ef類(lèi)型的數(shù)據(jù)有isRef屬性,底層自動(dòng)會(huì)將.value加上
數(shù)據(jù)是reactive類(lèi)型
<template> <div> <p>{{age}}</p> <button @click="Fn">按鈕</button> </div> </template> <script> import {reactive} from 'vue'; export default { name: 'App', setup() { let age = reactive({value: 18}); function Fn() { age.value = 666; console.log(age) } return {age, Fn} } } </script>
點(diǎn)擊按鈕,頁(yè)面還是個(gè)對(duì)象數(shù)據(jù),因?yàn)槭莚eactive類(lèi)型數(shù)據(jù),沒(méi)有isRef屬性,vue不會(huì)自動(dòng)在模板添加.value, 所以我們需要手動(dòng)在模板添加age.value
我們?nèi)绾闻袛鄶?shù)據(jù)到底是ref還是reactive?
通過(guò)isRef / isReactive 方法
<template> <div> <p>{{age}}</p> <button @click="Fn">按鈕</button> </div> </template> <script> import {reactive} from 'vue'; export default { name: 'App', setup() { let age = reactive({value: 18}); function Fn() { console.log(isRef(age)); //false console.log(isReactive(age)); //true age.value = 666; } return {age, Fn} } } </script>
擴(kuò)展知識(shí)點(diǎn):vue3 中 reactive 和 ref 對(duì)比區(qū)別
定于數(shù)據(jù)角度對(duì)比:ref 用來(lái)定義:基本類(lèi)型數(shù)據(jù)
reactive 用來(lái)定義:對(duì)象、或數(shù)組類(lèi)型的數(shù)據(jù)
備注:ref也可以用來(lái)定義對(duì)象或數(shù)組類(lèi)型數(shù)據(jù),它內(nèi)部會(huì)自動(dòng)通過(guò) reactive
轉(zhuǎn)為代理對(duì)象
原理角度對(duì)比:ref 通過(guò) Object.defineProperty()
的 get 與 set 來(lái)實(shí)現(xiàn)響應(yīng)式的(數(shù)據(jù)劫持)
reactive 通過(guò)使用 Proxy
來(lái)實(shí)現(xiàn)響應(yīng)式(數(shù)據(jù)劫持),并通過(guò)Reflect 操作源對(duì)象內(nèi)部的數(shù)據(jù)。
使用角度對(duì)比:ref 定義的數(shù)據(jù):操作數(shù)據(jù)需要 .value
,讀取數(shù)據(jù)時(shí)模版中直接讀取不需要 .value
reactive 定義的數(shù)據(jù):操作數(shù)據(jù)與讀取數(shù)據(jù),均不需要 .value
到此這篇關(guān)于vue3 中ref和reactive的區(qū)別講解的文章就介紹到這了,更多相關(guān)vue3 - ref和reactive的區(qū)別內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Vue3.0中Ref與Reactive的區(qū)別示例詳析
- 前端vue3中的ref與reactive用法及區(qū)別總結(jié)
- Vue3 的ref和reactive的用法和區(qū)別示例解析
- Vue3中ref和reactive的基本使用及區(qū)別詳析
- Vue3中ref和reactive的區(qū)別及說(shuō)明
- vue3.0中ref與reactive的區(qū)別及使用場(chǎng)景分析
- Vue3中關(guān)于ref和reactive的區(qū)別分析
- vue3中reactive和ref的實(shí)現(xiàn)與區(qū)別詳解
- vue3 ref 和reactive的區(qū)別詳解
- vue3中ref和reactive的區(qū)別舉例詳解
相關(guān)文章
Vue中l(wèi)ocalStorage的用法和監(jiān)聽(tīng)localStorage值的變化
這篇文章主要介紹了Vue中l(wèi)ocalStorage的用法和監(jiān)聽(tīng)localStorage值的變化,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-04-04Element中select多數(shù)據(jù)加載優(yōu)化的實(shí)現(xiàn)
本文主要介紹了Element中select多數(shù)據(jù)加載優(yōu)化的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-09-09基于vue實(shí)現(xiàn)圖片預(yù)覽功能并顯示在彈窗的最上方
這篇文章主要為大家詳細(xì)介紹了如何基于vue實(shí)現(xiàn)圖片預(yù)覽功能并顯示在彈窗的最上方,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-10-10vue.js+element-ui動(dòng)態(tài)配置菜單的實(shí)例
今天小編就為大家分享一篇vue.js+element-ui動(dòng)態(tài)配置菜單的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-09-09vue實(shí)現(xiàn)購(gòu)物車(chē)功能(商品分類(lèi))
這篇文章主要為大家詳細(xì)介紹了vue實(shí)現(xiàn)購(gòu)物車(chē)功能,商品分類(lèi),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-04-04vue實(shí)現(xiàn)按鈕的長(zhǎng)按功能
這篇文章主要介紹了vue實(shí)現(xiàn)按鈕的長(zhǎng)按功能,點(diǎn)擊按鈕實(shí)現(xiàn)長(zhǎng)按,用戶需要按下按鈕幾秒鐘,然后觸發(fā)相應(yīng)的事件,本文通過(guò)實(shí)例代碼給大家分享實(shí)現(xiàn)思路,感興趣的朋友一起看看吧2022-01-01