最新国产好看的视频,伊人天堂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對象, 二者內部操作的是同一個數(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ù)內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

最新評論

九寨沟县| 榕江县| 尉犁县| 福泉市| 镇远县| 华蓥市| 翁源县| 高安市| 江陵县| 青浦区| 连南| 镇雄县| 绵阳市| 古丈县| 永福县| 含山县| 玛纳斯县| 博乐市| 梁河县| 青田县| 大厂| 师宗县| 泰兴市| 美姑县| 金乡县| 河东区| 柘荣县| 叶城县| 南昌县| 香格里拉县| 双流县| 裕民县| 敖汉旗| 沙洋县| 大新县| 若羌县| 古交市| 张家界市| 嘉义县| 连云港市| 临高县|