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

vue3?中的toRef函數(shù)和toRefs函數(shù)的基本使用

 更新時間:2022年11月11日 11:27:55   作者:wuxing164  
這篇文章主要介紹了vue3?toRef函數(shù)和toRefs函數(shù),文中介紹了ref和toRef的區(qū)別,ref本質是拷貝,修改響應式數(shù)據(jù)不會影響原始數(shù)據(jù),toRef的本質是引用關系,修改響應式數(shù)據(jù)會影響原始數(shù)據(jù),需要的朋友可以參考下

這篇我們看下toRef和toRefs的基本使用

我們知道ref可以用于創(chuàng)建一個響應式數(shù)據(jù),而toRef也可以創(chuàng)建一個響應式數(shù)據(jù),那他們之間有什么區(qū)別呢?
事實上,如果利用ref函數(shù)將某個對象中的屬性變成響應式數(shù)據(jù),修改響應式數(shù)據(jù)是不會影響到原始數(shù)據(jù)。

import {ref} from 'vue';
export default {
  name:'App'
  setup(){
    let obj = {name : 'alice', age : 12};
    let newObj= ref(obj.name);
    function change(){
      newObj.value = 'Tom';
      console.log(obj,newObj)
    }
    return {newObj,change}
  }
}

上述代碼,當change執(zhí)行的時候,響應式數(shù)據(jù)發(fā)生改變,而原始數(shù)據(jù)obj并不會改變。
原因在于,ref的本質是拷貝,與原始數(shù)據(jù)沒有引用關系

需要注意ref(obj.name)相當于ref('alice')相當于reactive({value:'alice'})
所以在修改數(shù)據(jù)時,是修改newObj.value=xxx

而如果使用toRef將某個對象中的屬性變成響應式數(shù)據(jù),修改響應式數(shù)據(jù)是會影響到原始數(shù)據(jù)的。但是需要注意,如果修改通過toRef創(chuàng)建的響應式數(shù)據(jù),并不會觸發(fā)UI界面的更新。
所以,toRef的本質是引用,與原始數(shù)據(jù)有關聯(lián)

import {toRef} from 'vue';
export default {
  name:'App'
  setup(){
    let obj = {name : 'alice', age : 12};
    let newObj= toRef(obj, 'name');
    function change(){
      newObj.value = 'Tom';
      console.log(obj,newObj)
    }
    return {newObj,change}
  }
}

上述代碼,當change執(zhí)行的時候,響應式數(shù)據(jù)發(fā)生改變,原始數(shù)據(jù)obj并不會改變,但是UI界面不會更新

小結:
ref和toRef的區(qū)別
(1). ref本質是拷貝,修改響應式數(shù)據(jù)不會影響原始數(shù)據(jù);toRef的本質是引用關系,修改響應式數(shù)據(jù)會影響原始數(shù)據(jù)
(2). ref數(shù)據(jù)發(fā)生改變,界面會自動更新;toRef當數(shù)據(jù)發(fā)生改變是,界面不會自動更新
(3). toRef傳參與ref不同;toRef接收兩個參數(shù),第一個參數(shù)是哪個對象,第二個參數(shù)是對象的哪個屬性

所以如果想讓響應式數(shù)據(jù)和以前的數(shù)據(jù)關聯(lián)起來,并且想在更新響應式數(shù)據(jù)的時候不更新UI,那么就使用toRef

有的時候,我們希望將對象的多個屬性都變成響應式數(shù)據(jù),并且要求響應式數(shù)據(jù)和原始數(shù)據(jù)關聯(lián),并且更新響應式數(shù)據(jù)的時候不更新界面,就可以使用toRefs,用于批量設置多個數(shù)據(jù)為響應式數(shù)據(jù)。(toRef一次僅能設置一個數(shù)據(jù))
toRefs接收一個對象作為參數(shù),它會遍歷對象身上的所有屬性,然后挨個調用toRef執(zhí)行
例如

import {toRefs} from 'vue';
export default {
  name:'App'
  setup(){
    let obj = {name : 'alice', age : 12};
    let newObj= toRefs(obj);
    function change(){
      newObj.name.value = 'Tom';
      newObj.age.value = 18;
      console.log(obj,newObj)
    }
    return {newObj,change}
  }
}

Vue3的toRef

更改person.age的值時,

通過ref(person.age)得到的age1不會改變,因為ref是復制,拷貝了一份新的數(shù)據(jù)值單獨操作, 更新時相互不影響

通過toRef(person,‘age’)得到的age2會改變,因為 toRef是引用。它為源響應式對象上的某個屬性創(chuàng)建一個 ref對象, 二者內(nèi)部操作的是同一個數(shù)據(jù)值, 更新時二者是同步的

? setup() {
? ? let person =reactive( { name: "long",age:23 });

? ? let age1 = ref(person.age);
? ? let age2=toRef(person,'age')

? ? const change1 = () => {
? ? ? person.age++
? ? };
? ? return {
? ? ? age1,
? ? ? age2,
? ? ? change1,
? ? };
? },

應用: 當要將 某個prop 的 ref 傳遞給復合函數(shù)時,toRef 很有用

useFeatureX函數(shù)需要使用props中的foo屬性,且foo要為ref。

? setup (props, context) {
? ? const length = useFeatureX(toRef(props, 'foo'))

? ? return {
? ? ? length
? ? }
? }

到此這篇關于vue3 toRef函數(shù)和toRefs函數(shù)的文章就介紹到這了,更多相關vue3 toRef和toRefs函數(shù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

最新評論

太仆寺旗| 新晃| 锡林浩特市| 邳州市| 双牌县| 太谷县| 甘德县| 甘德县| 水城县| 瑞安市| 白玉县| 大丰市| 二手房| 刚察县| 永德县| 来安县| 闽侯县| 南涧| 揭阳市| 新河县| 兴仁县| 邮箱| 新乡市| 垫江县| 安多县| 武安市| 广平县| 南充市| 工布江达县| 军事| 舒城县| 新晃| 永州市| 邵阳县| 常德市| 祁连县| 吉安市| 藁城市| 行唐县| 抚远县| 芜湖县|