最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

vue3中ref在js中為什么需要.value才能獲取/修改值舉例詳解

 更新時(shí)間:2025年05月20日 09:23:23   作者:前端張三  
這篇文章主要介紹了vue3中ref在js中為什么需要.value才能獲取/修改值的相關(guān)資料,Vue3中ref用于基本類型需.value訪問(wèn),reactive用于對(duì)象自動(dòng)解構(gòu),Vue2用Object.defineProperty,Vue3用Proxy,需要的朋友可以參考下

一、ref定義值什么情況下需要.value

1. 情況1:在js中需要使用.value

2. 情況2:在html模版中不需要使用.value

需要了解
在reactive中會(huì)自動(dòng)解構(gòu),不需要.value的示例

3. 情況3

1.代碼

一個(gè)很簡(jiǎn)單的例子,有一個(gè)用ref綁定的值,有一個(gè)reactive綁定的obj的值,obj里面有ref綁定的值,頁(yè)面上有個(gè)按鈕,點(diǎn)擊按鈕改變r(jià)ef的值,然后打印obj

  <div>
    <button @click="messageHandle">點(diǎn)擊修改值</button>
  </div>
import { reactive, ref } from 'vue'
const message = ref('這是一個(gè)信息')
const obj = reactive({
	name: '章三',
	age: 18,
	describe: message, // 這里設(shè)置響應(yīng)式,不需要.value
})
const messageHandle = () => {
  message.value = '這是修改后的信息'
  console.log('obj', obj, obj.describe);
}

2.效果

3.

vue3中ref在script中為什么需要.value才能獲取/修改值?
首先需要注意的是,為什么說(shuō)的是script中呢?
原因:因?yàn)樵谀0澹╤tml)中和reactive({})中會(huì)自動(dòng)解構(gòu), 模板中大家都知道了

二、重新了解一下vue2和vue3的響應(yīng)式

這兩種都是響應(yīng)式,響應(yīng)式的本質(zhì)是派發(fā)更新,響應(yīng)式數(shù)據(jù)的本質(zhì)都是攔截?cái)?shù)據(jù)

1.vue2(Object.defineProperty)

Object.defineProperty(obj, prop, descriptor)

  • obj :要定義屬性的對(duì)象
  • prop:一個(gè)字符串或 Symbol,指定了要定義或修改的屬性鍵。
  • descriptor:屬性描述符。

2.vue3(proxy)

Proxy的簡(jiǎn)單使用
const p = new Proxy(target, handler)
target : 目標(biāo)對(duì)象,可以是任何類型的對(duì)象,包括數(shù)組,函數(shù)。
handler: 定義代理對(duì)象的行為。
返回值:返回的就是一個(gè)代理對(duì)象,之后外部對(duì)屬性的讀寫都是針對(duì)代理對(duì)象來(lái)做的

3. 兩種攔截的區(qū)別

  • Object.defineProperty 是針對(duì)對(duì)象特定屬性的讀寫操作進(jìn)行攔截
  • Proxy 則是針對(duì)一整個(gè)對(duì)象的多種操作,包括屬性的讀取、賦值、屬性的刪除、屬性描述符的獲取和設(shè)置、原型的查看、函數(shù)調(diào)用等行為能夠進(jìn)行攔截。同時(shí)proxy的攔截速度一般比object.defineProperty的速度快。

上面這段總結(jié):充分說(shuō)明了vue2中,監(jiān)聽(tīng)數(shù)組的插入和刪除,為什么有時(shí)候會(huì)監(jiān)聽(tīng)不到,而vue3能夠監(jiān)聽(tīng)的到的原因。

三、為什么ref在js中為什么需要.value才能獲取/修改值?

1: vue3為什么會(huì)有ref和reactive兩種響應(yīng)式數(shù)據(jù)???

原因:proxy的參數(shù) target可以是任何類型的對(duì)象,包括數(shù)組,函數(shù),但不能是簡(jiǎn)單數(shù)據(jù)類型,為了區(qū)分基本類型(如字符串、數(shù)字、布爾值)也能享受響應(yīng)式系統(tǒng)的好處。在 JavaScript 中,基本類型不能直接被代理,因此需要通過(guò)一個(gè)對(duì)象來(lái)包裹。通過(guò)將值放到.value中進(jìn)行代理。

2:ref和reactive的底層實(shí)現(xiàn)

看了一圈底層代碼,大概可以這么理解:

reactive = proxy // 如果是reactive就直接使用proxy代理
ref = isRef ? Object.defineProperty : reactive 

// isRef為false,說(shuō)明不是的話使用reactive的響應(yīng)式方法,也就是proxy的代理。

// isRef為true,說(shuō)明是簡(jiǎn)單數(shù)據(jù)類型,使用Object.defineProperty,由于是簡(jiǎn)單數(shù)據(jù)類型,所以不會(huì)有對(duì)象的添加刪除這種操作,也就不會(huì)有問(wèn)題,同時(shí)由于是Object.defineProperty,簡(jiǎn)單數(shù)據(jù)類型無(wú)法直接代理,那么只能給ref的這個(gè)值包裹一層,通過(guò).value來(lái)修改/獲取值了,這就是vue3中ref在js中需要.value才能獲取/修改值的真正原因。有興趣的可以看下vue3的源碼

總結(jié)

到此這篇關(guān)于vue3中ref在js中為什么需要.value才能獲取/修改值的文章就介紹到這了,更多相關(guān)vue3 ref在js中.value修改值內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Vue3中插槽(slot)的全部使用方法

    Vue3中插槽(slot)的全部使用方法

    這篇文章主要介紹了Vue3中插槽(slot)的全部使用方法,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-08-08
  • Vue使用百度地圖實(shí)現(xiàn)城市定位

    Vue使用百度地圖實(shí)現(xiàn)城市定位

    這篇文章主要為大家詳細(xì)介紹了Vue使用百度地圖實(shí)現(xiàn)城市定位,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • Vue項(xiàng)目中安裝插件的命令及區(qū)別說(shuō)明

    Vue項(xiàng)目中安裝插件的命令及區(qū)別說(shuō)明

    這篇文章主要介紹了Vue項(xiàng)目中安裝插件的命令及區(qū)別說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2025-06-06
  • Vue路由組件通過(guò)props配置傳參的實(shí)現(xiàn)

    Vue路由組件通過(guò)props配置傳參的實(shí)現(xiàn)

    本文主要介紹了Vue路由組件通過(guò)props配置傳參的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • vue如何在style標(biāo)簽中使用變量(數(shù)據(jù))詳解

    vue如何在style標(biāo)簽中使用變量(數(shù)據(jù))詳解

    在我們編寫css樣式中是不能直接使用vue data中的變量的,下面這篇文章主要給大家介紹了關(guān)于vue如何在style標(biāo)簽中使用變量(數(shù)據(jù))的相關(guān)資料,需要的朋友可以參考下
    2022-09-09
  • vue項(xiàng)目嵌套iframe實(shí)現(xiàn)發(fā)送、接收數(shù)據(jù)

    vue項(xiàng)目嵌套iframe實(shí)現(xiàn)發(fā)送、接收數(shù)據(jù)

    這篇文章主要介紹了vue項(xiàng)目嵌套iframe實(shí)現(xiàn)發(fā)送、接收數(shù)據(jù),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • 使用vue實(shí)現(xiàn)HTML頁(yè)面生成圖片的方法

    使用vue實(shí)現(xiàn)HTML頁(yè)面生成圖片的方法

    這篇文章主要介紹了使用vue實(shí)現(xiàn)HTML頁(yè)面生成圖片的相關(guān)知識(shí),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-03-03
  • 解決Vue Loading PostCSS Plugin failed:Cannot find module autoprefixer問(wèn)題

    解決Vue Loading PostCSS Plugin failed:Cann

    這篇文章主要介紹了解決Vue Loading PostCSS Plugin failed:Cannot find module autoprefixer問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • 詳解在vue-cli中引用jQuery、bootstrap以及使用sass、less編寫css

    詳解在vue-cli中引用jQuery、bootstrap以及使用sass、less編寫css

    這篇文章主要介紹了詳解在vue-cli中引用jQuery、bootstrap以及使用sass、less編寫css,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-11-11
  • 保姆級(jí)Vue3開(kāi)發(fā)教程分享

    保姆級(jí)Vue3開(kāi)發(fā)教程分享

    這篇Vue3開(kāi)發(fā)文檔,包含了 Vue3 開(kāi)發(fā)中使用的所有語(yǔ)法,文中的示例代碼講解詳細(xì),希望所有像他一樣還不熟的伙伴快速上手 Vue3,不會(huì)的再不看要遭老罪咯
    2023-04-04

最新評(píng)論

根河市| 怀来县| 周宁县| 漳浦县| 葵青区| 建昌县| 远安县| 乌拉特前旗| 合作市| 建昌县| 抚顺市| 象州县| 墨脱县| 额敏县| 济南市| 陆丰市| 大厂| 大田县| 民勤县| 开鲁县| 金塔县| 镇远县| 汝州市| 大埔区| 南丹县| 永兴县| 金平| 内江市| 海南省| 南平市| 玉龙| 石嘴山市| 临澧县| 大田县| 屏山县| 杭锦后旗| 吉木萨尔县| 巴楚县| 克东县| 迭部县| 沙坪坝区|