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

一文搞懂Vue3中toRef和toRefs的區(qū)別

 更新時(shí)間:2023年09月21日 09:00:54   作者:前端小碼哥  
toRef 和 toRefs都是Vue3 中的響應(yīng)式轉(zhuǎn)換工具函數(shù),換句話說,toRef 和 toRefs 就是用來創(chuàng)建響應(yīng)式的引用的,主要用來取出響應(yīng)式對象里的屬性,或者解構(gòu)響應(yīng)式對象,本文小編就來帶大家搞清楚Vue3中toRef和toRefs的區(qū)別,需要的朋友可以參考下

上面這段代碼中:

  • 我們使用 reactive 創(chuàng)建了一個(gè)名為 info 的響應(yīng)式對象,包含 name 和 age 屬性。
  • 然后使用 toRef 函數(shù)將 info 對象的 age 屬性轉(zhuǎn)換為一個(gè)獨(dú)立的 ref 對象。
  • 接著定義了兩個(gè)方法 updateInfoObjAge 和 updateAge,分別用于更新 info 對象的 age 屬性和 age 引用的值。

從上面的代碼中,我們可以看到,age 屬性是使用 toRef 函數(shù)轉(zhuǎn)換的具有響應(yīng)式的 ref 屬性,當(dāng)我們更新時(shí),使用 reactive 定義的響應(yīng)式對象 info 中的 age 也會(huì)隨著更新。

<script setup>
  import { reactive } from 'vue';
  let info = reactive({
    name: 'Echo',
    age: 26,
    gender: 'Male',
  })
  // 這樣解構(gòu)會(huì)丟失響應(yīng)式效果
  let { name, age, gender } = info;
</script>

下面,我們一起看看 toRef 和 toRefs 的用法:

1. toRef

  • toRef 函數(shù)可以將一個(gè)響應(yīng)式對象的屬性轉(zhuǎn)換為一個(gè)獨(dú)立的 ref 對象。
  • 返回的是一個(gè)指向源對象屬性的 ref 引用,任何對該引用的修改都會(huì)同步到源對象屬性上。
  • 使用 toRef 時(shí)需要傳入源對象和屬性名作為參數(shù)。

下面我們一起看一段代碼:

<script setup>
  import { reactive, toRef } from 'vue';
  let info = reactive({
    name: 'Echo',
    age: 26,
  })
  let age = toRef(info, 'age');
  const updateInfoObjAge = () => {
    info.age++;
  }
  const updateAge = () => {
    age.value++;
  }
</script>
<template>
  <div id="app">
    <p>info對象中的age:{{ info.age }}</p>
    <button @click="updateInfoObjAge">更新info對象中的 age</button>
    <br />
    <p>使用toRef函數(shù)轉(zhuǎn)換后的age:{{ age }}</p>
    <button @click="updateAge">更新 age</button>
  </div>
</template>

上面這段代碼中:

  • 我們使用 reactive 創(chuàng)建了一個(gè)名為 info 的響應(yīng)式對象,包含 name 和 age 屬性。
  • 然后使用 toRef 函數(shù)將 info 對象的 age 屬性轉(zhuǎn)換為一個(gè)獨(dú)立的 ref 對象。
  • 接著定義了兩個(gè)方法 updateInfoObjAge 和 updateAge,分別用于更新 info 對象的 age 屬性和 age 引用的值。

從上面的代碼中,我們可以看到,age 屬性是使用 toRef 函數(shù)轉(zhuǎn)換的具有響應(yīng)式的 ref 屬性,當(dāng)我們更新時(shí),使用 reactive 定義的響應(yīng)式對象 info 中的 age 也會(huì)隨著更新。

而且,從開發(fā)工具中,我們也可以看到,age 屬性是一個(gè)具有 ref 響應(yīng)式的屬性。

2. toRefs

  • toRefs 函數(shù)可以將一個(gè)響應(yīng)式對象轉(zhuǎn)換為一個(gè)普通的對象,該對象的每個(gè)屬性都是獨(dú)立的 ref 對象。
  • 返回的對象可以進(jìn)行解構(gòu),每個(gè)屬性都可以像普通的 ref 對象一樣訪問和修改,而且會(huì)保持響應(yīng)式的關(guān)聯(lián)。
  • toRefs 的使用場景主要是在將響應(yīng)式對象作為屬性傳遞給子組件時(shí),確保子組件可以正確地訪問和更新這些屬性。

下面我們一起看一段代碼:

<script setup>
  import { reactive, toRefs } from 'vue';
  let info = reactive({
    name: 'Echo',
    age: 26,
    gender: 'Male',
  })
  let { name, age, gender } = toRefs(info);
  const update = () => {
    name.value = 'Julie';
    age.value = 33;
    gender.value = 'Female';
  }
</script>
<template>
  <div id="app">
    <p>info對象中的name:{{ info.name }}</p>
    <p>info對象中的age:{{ info.age }}</p>
    <p>info對象中的gender:{{ info.gender }}</p>
    <br />
    <p>解構(gòu)出來的name:{{ name }}</p>
    <p>解構(gòu)出來的age:{{ age }}</p>
    <p>解構(gòu)出來的gender:{{ gender }}</p>
    <button @click="update">更新數(shù)據(jù)</button>
  </div>
</template>

上面這段代碼中:

  • 首先,使用 reactive 函數(shù)創(chuàng)建了一個(gè)響應(yīng)式對象 info,包含了 name、age 和 gender 三個(gè)屬性,同時(shí)設(shè)置了初始值。
  • 接著,使用 toRefs 函數(shù)將 info 對象轉(zhuǎn)換為多個(gè)獨(dú)立的響應(yīng)式引用對象。然后通過解構(gòu)賦值,把 name、age 和 gender 三個(gè)響應(yīng)式引用對象分別賦給了相應(yīng)的變量。
  • 最后,添加了一個(gè)按鈕,點(diǎn)擊按鈕會(huì)觸發(fā) update 函數(shù),在 update 函數(shù)中,通過修改響應(yīng)式引用對象的 value 屬性來更新數(shù)據(jù)的值。

從開發(fā)工具中,我們可以看到,解構(gòu)出來的每個(gè)屬性,都是獨(dú)立的具有 ref 響應(yīng)式的屬性,因此,我們需要使用 .value 才能訪問和修改其值。

3. 相同點(diǎn)

  • toRef 和 toRefs 都用于將響應(yīng)式對象的屬性轉(zhuǎn)換為 ref 對象。
  • 轉(zhuǎn)換后的屬性仍然保持響應(yīng)式,對屬性的修改會(huì)反映到源對象上。
  • 不管是使用 toRef 還是 toRefs 將響應(yīng)式對象轉(zhuǎn)成普通對象,在 script 中修改和訪問其值都需要通過 .value 進(jìn)行。

4. 不同點(diǎn)

  • toRef 修改的是對象的某個(gè)屬性,生成一個(gè)單獨(dú)的 ref 對象。
  • toRefs 修改的是整個(gè)對象,生成多個(gè)獨(dú)立的 ref 對象集合。
  • toRefs 適用于在組件傳遞屬性或解構(gòu)時(shí)使用,更加方便靈活,而 toRef 更適合提取單個(gè)屬性進(jìn)行操作。

通過上面對 toRef 和 toRefs 函數(shù)的了解,你們知道為什么需要 toRef 和 toRefs 了嗎?

總結(jié)起來就是:在不丟失響應(yīng)式的前提下,對響應(yīng)式對象數(shù)據(jù)進(jìn)行解構(gòu),這樣如果在 setup 中返回 toRefs(obj),或者 toRef(obj, 'xxx'),我們就可以在 template 中不使用 obj.xxx 來取值了。

以上就是一文搞懂Vue3中toRef和toRefs的區(qū)別的詳細(xì)內(nèi)容,更多關(guān)于Vue3 toRef和toRefs區(qū)別的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 淺析vue偵測數(shù)據(jù)的變化之基本實(shí)現(xiàn)

    淺析vue偵測數(shù)據(jù)的變化之基本實(shí)現(xiàn)

    這里涉及到Vue一個(gè)重要特性:響應(yīng)式系統(tǒng)。數(shù)據(jù)模型只是普通的 JavaScript對象,當(dāng)我們修改時(shí),視圖會(huì)被更新,而變化偵測是響應(yīng)式系統(tǒng)的核心
    2021-06-06
  • 詳解vue項(xiàng)目中調(diào)用百度地圖API使用方法

    詳解vue項(xiàng)目中調(diào)用百度地圖API使用方法

    這篇文章主要介紹了vue項(xiàng)目中調(diào)用百度地圖API使用方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • Vue中el-table條件渲染防止樣式亂掉(解決方法)

    Vue中el-table條件渲染防止樣式亂掉(解決方法)

    這篇文章主要介紹了Vue中el-table條件渲染防止樣式亂掉問題,通過使用:key="Math.random()" 可解決樣式錯(cuò)亂問題,此key屬性是vue自帶的特殊屬性,主要用在 Vue 的虛擬 DOM 算法,在新舊 nodes 對比時(shí)辨識(shí) VNodes,依次來提升頁面渲染性能,感興趣的朋友一起看看吧
    2023-11-11
  • 前端JS也可以連點(diǎn)成線詳解(Vue中運(yùn)用AntVG6)

    前端JS也可以連點(diǎn)成線詳解(Vue中運(yùn)用AntVG6)

    這篇文章主要給大家介紹了關(guān)于前端JS連點(diǎn)成線(Vue中運(yùn)用?AntVG6)的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2023-01-01
  • vue怎樣獲取當(dāng)前時(shí)間,并且傳遞給后端(不用注解)

    vue怎樣獲取當(dāng)前時(shí)間,并且傳遞給后端(不用注解)

    這篇文章主要介紹了vue怎樣獲得當(dāng)前時(shí)間,并且傳遞給后端(不用注解)問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • vscode中prettier和eslint換行縮進(jìn)沖突的問題

    vscode中prettier和eslint換行縮進(jìn)沖突的問題

    這篇文章主要介紹了vscode中prettier和eslint換行縮進(jìn)沖突的問題及解決,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-10-10
  • Vue2的雙端diff算法與Vue3的快速diff算法詳解

    Vue2的雙端diff算法與Vue3的快速diff算法詳解

    文章詳細(xì)介紹了Vue中的Diff算法,特別是Vue2的雙端Diff和Vue3的快速Diff算法,雙端Diff通過四個(gè)指針從兩端向中間遍歷,減少DOM操作,快速Diff通過預(yù)處理,減少參與復(fù)雜對比的節(jié)點(diǎn),利用最長遞增子序列優(yōu)化亂序匹配,兩者都利用節(jié)點(diǎn)的key值來優(yōu)化更新過程,提升性能
    2026-04-04
  • vue如何實(shí)現(xiàn)配置vite

    vue如何實(shí)現(xiàn)配置vite

    本文介紹了在Vue項(xiàng)目中配置Vite的步驟和常見配置項(xiàng),包括開發(fā)服務(wù)器配置、路徑別名配置、構(gòu)建配置、CSS配置、環(huán)境變量配置及擴(kuò)展插件的使用,通過這些配置,可以提升Vue項(xiàng)目的開發(fā)體驗(yàn)和構(gòu)建效率
    2025-12-12
  • vue項(xiàng)目中微信登錄的實(shí)現(xiàn)操作

    vue項(xiàng)目中微信登錄的實(shí)現(xiàn)操作

    這篇文章主要介紹了vue項(xiàng)目中微信登錄的實(shí)現(xiàn)操作,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09
  • vite配置@別名以及讓vscode智能提示路經(jīng)的步驟

    vite配置@別名以及讓vscode智能提示路經(jīng)的步驟

    這篇文章主要給大家介紹了關(guān)于vite配置@別名以及讓vscode智能提示路經(jīng)的步驟,文中通過代碼示例以及圖文介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用vue具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2023-08-08

最新評論

迁安市| 西乡县| 新竹市| 基隆市| 镇平县| 榕江县| 介休市| 怀集县| 彰化市| 盱眙县| 深水埗区| 夏河县| 阿拉善右旗| 虹口区| 沅江市| 慈利县| 滕州市| 三明市| 娄底市| 方城县| 朝阳市| 金阳县| 南安市| 黎城县| 仙桃市| 和平区| 武汉市| 海兴县| 梁山县| 灵山县| 瑞安市| 华坪县| 绥化市| 黄龙县| 广南县| 房产| 天气| 牙克石市| 合江县| 永仁县| 镇远县|