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

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

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

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

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

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

需要了解
在reactive中會自動解構,不需要.value的示例

3. 情況3

1.代碼

一個很簡單的例子,有一個用ref綁定的值,有一個reactive綁定的obj的值,obj里面有ref綁定的值,頁面上有個按鈕,點擊按鈕改變ref的值,然后打印obj

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

2.效果

3.

vue3中ref在script中為什么需要.value才能獲取/修改值?
首先需要注意的是,為什么說的是script中呢?
原因:因為在模板(html)中和reactive({})中會自動解構, 模板中大家都知道了

二、重新了解一下vue2和vue3的響應式

這兩種都是響應式,響應式的本質是派發(fā)更新,響應式數(shù)據(jù)的本質都是攔截數(shù)據(jù)

1.vue2(Object.defineProperty)

Object.defineProperty(obj, prop, descriptor)

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

2.vue3(proxy)

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

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

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

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

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

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

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

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

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

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

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

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

總結

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

相關文章

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    解決Vue Loading PostCSS Plugin failed:Cann

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

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

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

    保姆級Vue3開發(fā)教程分享

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

最新評論

宁武县| 陆丰市| 衡东县| 城步| 长顺县| 锡林郭勒盟| 巨野县| 洛宁县| 克什克腾旗| 西乌珠穆沁旗| 甘孜县| 都安| 石首市| 铁岭市| 富阳市| 柘荣县| 和龙市| 洮南市| 平江县| 陕西省| 沙雅县| 黄骅市| 大名县| 同心县| 宜兰县| 怀集县| 个旧市| 米泉市| 浪卡子县| 虞城县| 罗山县| 绥滨县| 杭州市| 康马县| 长子县| 丰都县| 襄汾县| 榕江县| 资溪县| 汉阴县| 阿荣旗|