亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

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

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

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

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

3. 情況3

1.代碼

一個(gè)很簡單的例子,有一個(gè)用ref綁定的值,有一個(gè)reactive綁定的obj的值,obj里面有ref綁定的值,頁面上有個(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才能獲取/修改值?
首先需要注意的是,為什么說的是script中呢?
原因:因?yàn)樵谀0澹╤tml)中和reactive({})中會自動解構(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 :要定義屬性的對象
  • prop:一個(gè)字符串或 Symbol,指定了要定義或修改的屬性鍵。
  • descriptor:屬性描述符。

2.vue3(proxy)

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

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

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

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

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

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

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

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

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

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

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

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

總結(jié)

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

相關(guān)文章

  • Vue如何解決每次發(fā)版都要強(qiáng)刷清除瀏覽器緩存問題

    Vue如何解決每次發(fā)版都要強(qiáng)刷清除瀏覽器緩存問題

    這篇文章主要介紹了Vue如何解決每次發(fā)版都要強(qiáng)刷清除瀏覽器緩存問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • vue路由第二次進(jìn)入頁面created和mounted不執(zhí)行問題及解決

    vue路由第二次進(jìn)入頁面created和mounted不執(zhí)行問題及解決

    這篇文章主要介紹了vue路由第二次進(jìn)入頁面created和mounted不執(zhí)行問題及解決方案,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • vue中添加語音播報(bào)功能的實(shí)現(xiàn)

    vue中添加語音播報(bào)功能的實(shí)現(xiàn)

    本文主要介紹了vue中添加語音播報(bào)功能的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • vue中路由的前進(jìn)和后退問題

    vue中路由的前進(jìn)和后退問題

    這篇文章主要介紹了vue中路由的前進(jìn)和后退問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-10-10
  • vue-cli-service serve報(bào)錯(cuò)error:0308010C:digital envelope routines::unsupported

    vue-cli-service serve報(bào)錯(cuò)error:0308010C:digital enve

    這篇文章主要介紹了vue-cli-service serve報(bào)錯(cuò)error:0308010C:digital envelope routines::unsupported的解決分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-06-06
  • vue源碼之首次渲染過程詳解

    vue源碼之首次渲染過程詳解

    這篇文章主要為大家詳細(xì)介紹了vue源碼之首次渲染過程,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-02-02
  • vue?為什么要封裝全局組件引入

    vue?為什么要封裝全局組件引入

    這篇文章主要介紹了vue為什么要封裝全局組件引入,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,感興趣的小伙伴可以參考一下
    2022-07-07
  • 在vue項(xiàng)目中使用sass語法問題

    在vue項(xiàng)目中使用sass語法問題

    sass是一個(gè)最初由Hampton Catlin設(shè)計(jì)并由Natalie Weizenbaum開發(fā)的層疊樣式表語言。這篇文章主要介紹了在vue項(xiàng)目中使用sass語法,需要的朋友可以參考下
    2019-07-07
  • vuex中store.commit和store.dispatch的區(qū)別及使用方法

    vuex中store.commit和store.dispatch的區(qū)別及使用方法

    這篇文章主要介紹了vuex中store.commit和store.dispatch的區(qū)別及使用方法,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • vue-router之nuxt動態(tài)路由設(shè)置的兩種方法小結(jié)

    vue-router之nuxt動態(tài)路由設(shè)置的兩種方法小結(jié)

    今天小編就為大家分享一篇vue-router之nuxt動態(tài)路由設(shè)置的兩種方法小結(jié),具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-09-09

最新評論