vue3 响应式对象的 api ,你全用过了吗?
创始人
2024-01-15 20:02:26
0

在这里插入图片描述

文章目录

      • Ⅰ. ref、reactive ( 递归监听 )
      • Ⅱ. isRef、isReactive ( 判断 )
      • Ⅲ. toRef 和 toRefs ( 解构 )
      • Ⅳ. toRaw 、 markRaw ( 解除代理)
      • Ⅴ. unref ( 拷贝 )
      • Ⅵ. shallowRef 、shallowReactive( 非递归监听 )
      • Ⅶ. triggerRef (强制更新)

Ⅰ. ref、reactive ( 递归监听 )

import {ref,reactive} from 'vue';
setup() {const num =  ref(123);num.value = 456;const obj = reactive({num:123});obj.value = 456;
}
  • ref 对象 在 html 模板中会 自动添加 value ( ref 对象中__v_isRef:true 进行判断的 )
  • ref 对象 => reactive( { value:0 } ) 底层自动转换为 reactive
  • 最终 基本数据 类型采用 => (Object.defineProperty) ,引用数据 类型采用 => ( proxy 代理 )

Ⅱ. isRef、isReactive ( 判断 )

import {isRef,isReactive} from 'vue';
setup() {const num = ref(123)console.log(isRef(num))  // => true
}
  • 用于判断是否是 Ref 和 Reactive 创建的响应对象
  • 使用场景较少

Ⅲ. toRef 和 toRefs ( 解构 )

toRef (一个属性)

import { toRef , reactive } from 'vue';
setup() {const obj = reactive({ width:10, height:20 })const width = toRef(obj,'width')return {width}
}
  • 将一个响应对象的属性,当作 响应对象 单独拿出来 。

toRefs ( 所有 )

import { toRefs , reactive } from 'vue';
setup() {const obj = reactive({ width:10, height:20 })const { width, height }= toRefs(obj)return {width, height}
}
  • 将多个或所有属性,拿出来 且还是响应对象,
  • 一般在返回的时候一次性全部导出 👇
import { toRefs , reactive } from 'vue';
setup() {const obj = reactive({ width:10, height:20 })return {...toRefs(obj)}
}

Ⅳ. toRaw 、 markRaw ( 解除代理)

toRaw ( 不影响本身 )

import {toRaw} from 'vue';
setup(){const num1 =  ref(123)const num2 = toRaw(num1)console.log(num2 === 123)  //=>true
}
  • 不影响原数据 ,相当于拷贝当前的值
  • 拷贝的值,不在是响应式对象

markRaw ( 添加 非响应对象 属性 )

import { markRaw, reactive } from "vue";
setup(){const obj = reactive({ num:1 }); //让数据无法被追踪obj.noUpdate = markRaw({num:1});function add() {obj.num++;      // 页面数据 会更新obj.noUpdate.num++; //页面数据 不会更新}return { obj , add }
}
  • 通过 markRaw 添加的值 => 其中的属性变化,页面不会监听的到
  • 用于添加搞定的参数,不会发生不会的 ( 从而节约资源 )

Ⅴ. unref ( 拷贝 )

const aaa = ref('abc');
const bbb = unref(aaa); 
  • 相当于 bbb = isRef(aaa) ? aaa.value : aaa 的语法糖
  • 可以用于拷贝

Ⅵ. shallowRef 、shallowReactive( 非递归监听 )

shallowRef 、shallowReactive(非递归监听)

import {shallowRef,shallowReactive} from 'vue';
setup(){const  obj1 = shallowRef({a:1,b:{c:2})const  obj2 = shallowReactive({a:1,b:{c:2})obj1.value.a = 2  //页面未更新obj2.b.c = 3  //页面未更新
}
  • obj1 (shallowRef)=> 只监听第一层( value 的值,不监听a、b、c、d 的值)
  • obj2 (shallowReactive)=> 只监听第一层( a、b 的值,不监听 c 的值)

Ⅶ. triggerRef (强制更新)

import {triggerRef, shallowRef} from 'vue';
setup(){const  obj1 = shallowRef({a:1,b:{c:2})obj1.value.a = 2 //页面没有发生更新,因为只监听value第一层triggerRef(obj1);   // 强制更新
  • 非递归监听,只监听首层 ,消耗的资源小;
  • 配合 triggerRef 强制更新 => 性能要大于 > 直接使用 (ref 和 reactive)

在这里插入图片描述

🚐 💨 华为社招直通车 👉 👉 华为od面试流程
🚀🚀🚀
总结不易,希望uu们不要吝啬你们的👍哟(^U^)ノ~YO!!如有问题,欢迎评论区批评指正😁

相关内容

热门资讯

生日表达感谢祝福语 生日表达感谢祝福语(精选80句)  在平平淡淡的日常中,大家对祝福语都不陌生吧,祝福语可以起到增进人...
唯美情人节祝福 常用唯美情人节祝福汇总(精选190句)  无法逃避的疑惑你却刻意闪躲,不想让你难过没有打破沉默。这篇...
平安夜祝福爱人的文案 2022年平安夜祝福爱人的文案(精选180句)  随着社交网络的兴起,越来越多人钟情于在社交平台上发...
儿童节快乐祝福语短信 2020年儿童节快乐祝福语短信大汇总24句  曾记:聪明童年神笔马良,欢笑童年黑猫警长,狂野童年哪吒...
送情人的温馨祝福语 送情人的温馨祝福语  在我们平凡的日常里,大家一定都接触过祝福语吧,祝福语就是把心中的美好祝愿用语句...
结婚十周年纪念日祝福语 结婚十周年纪念日祝福语(精选50句)  在平日的学习、工作和生活里,大家都用到过祝福语吧,祝福语就是...
新年祝贺词 新年祝贺词(精选150句)  做为领导,公司上下您最劳心,集体当中您最费神,应酬客户您最辛苦,加班加...
元旦给老板发的祝福语 元旦给老板发的祝福语  在日常生活或是工作学习中,大家都不可避免地会接触到祝福语吧,祝福语可以增进我...
跨年祝福语 2020跨年祝福语  1、元旦了,送你一件外套:口袋叫温暖;领子叫关怀;袖子叫体贴;扣子叫思念;让这...
重阳节对长辈的祝福语 重阳节对长辈的祝福语大全  在平平淡淡的学习、工作、生活中,大家总少不了要接触或使用祝福语吧,根据祝...
关心问候祝福短信 关心问候祝福短信  祝福语是指对人们的美好祝福的语句。祝福语在社会发展中已经不是仅限于在节日和宴会上...
公司年会蛋糕祝福语 公司年会蛋糕祝福语  在生活、工作和学习中,大家总免不了要接触或使用祝福语吧,借助祝福语人们可以表达...
通用表达春节快乐的祝福语短信 通用表达春节快乐的祝福语短信大集合34条  收获的情谊,请多多珍惜,收获的成绩,请低调莫提,收获的经...
公司员工温馨生日短信祝福语 公司员工温馨生日短信祝福语集锦  在日常学习、工作或生活中,大家对祝福语都再熟悉不过了吧,祝福语有助...
暖心平安夜祝福语QQ 2020年暖心平安夜祝福语QQ汇总33句  平安夜的钟声,是施了魔法的音乐,将快乐吉祥传递,把烦恼涤...
独特生日祝福语 独特生日祝福语大全  无论在学习、工作或是生活中,大家最不陌生的就是祝福语了吧,祝福语可以增进我们和...
春天祝福语 春天祝福语  在现实生活或工作学习中,大家总少不了要接触或使用祝福语吧,借助祝福语人们可以表达自己对...
七夕祝福语句 【精华】七夕祝福语句95句  我不是一个很会讲甜言蜜语的人,我不是一个只讲不做的人;我不会对你做什么...
三八节祝贺祝福语 三八节祝贺祝福语  在我们平凡的日常里,大家总免不了要接触或使用祝福语吧,祝福语可以增进我们和他人的...
暖心春节祝福语 2020年精选暖心春节祝福语汇总48条  春雷阵阵,喜气洋洋,辞旧迎新好佳节!春风袅袅,真情暖暖,推...