首页 > 其他分享 >vue3 toref ref toRow unref等等使用和功能测试

vue3 toref ref toRow unref等等使用和功能测试

时间:2024-07-03 23:19:25浏览次数:15  
标签:console log 对象 value toref 功能测试 unref let ref

代码测试

  • js代码

const rowData = reactive({
  nameAbc: 'sdfsdf'
})

console.log(rowData, "rowData")

let rowDataValue = toRaw(rowData);

console.log(rowDataValue, "rowdatavalue")

//toRefs 使对象本身转为普通对象,但是子属性全部转为ref value方式
//toRefs 就是把一个对象的属性全部转为ref
let rowDataRef = toRefs(rowData);

let abmmd = {
  a: '32432',
  b: "sdfkljsdfkjs",
  m: 234234,
  c: {
    d: 23423423
  }
}
// toRefs 可以将普通对象的子属性全部转为ref对象
let abmmd_refs = toRefs(abmmd);

console.log(abmmd_refs, "abmmd_refs")

console.log(rowDataRef, "toRefs")

//toRef 将reactive对象转为ref对象
/**
 * toRef 针对对象 value会返回一个proxy代理对象,对普通数据是直接监听,对对象数据是返回proxy代理对象,实现深度监听
 */
let rowData2 = toRef(rowData);
console.log(rowData2, "toRef_rowData")

//toValue 改变不了reactive proxy对象,只能改变ref创建的value对象
let rowData3 = toValue(rowData)

console.log(rowData3, "toValue")
//unref 改变不了proxy对象,只能改变ref创建的代理对象
let rowdata4 = unref(rowData);

console.log(rowdata4, "unref")

//将reactive 创建的proxy对象转为普通对象
let rowData5 = toRaw(rowData);

console.log(rowData5, "toRaw")

let nnd = ref("sdlfjslkfsjdf")

console.log(nnd, "ref_nnd")


console.log(nnd.value, "nnd")
//unref 将ref创建的代理对象转为普通对象,效果和toValue一样
let nnd2 = unref(nnd);

console.log(nnd2, "nnd2_unref")

//toValue 将ref创建的代理对象转为普通对象,效果和unref一样
let nnd3 = toValue(nnd);

console.log(nnd3, "nnd3_toValue")

/** 
 * isRef 只能判断ref创建的对象是否为ref,不能判断reactive创建的对象是否为reactive
 */
console.log(isRef(nnd), "isRef_test")// true
console.log(isRef(rowData), "isRef_test") //false

//isReactive 判断 reactive创建的对象是否为reactive
console.log(isReactive(rowData), "isReactive_test")

let cmdFrom = 2342342
let cmd = toRef(cmdFrom) //toRef 可以改变普通数据为ref对象

console.log(cmd, "cmd")

console.log(isProxy(rowData), "isProxy_test") //true
console.log(isProxy(nnd.value), "isProxy_test2")//false
console.log(isProxy(nnd), "isProxy_test3")//false



/**
 * shallowRef 创建的代理对象不能深度监听,只能监听第一层的对象属性
 */

let tttf = shallowRef(abmmd)

console.log(tttf, "tttf")

setTimeout(() => {
  
  // tttf.value.c.d = 449645864
}, 1000)

/**
 * ref 创建的代理对象能深度监听
 */ 
let tttc = ref(abmmd)

console.log(tttc, "tttc")

setTimeout(() => {
  tttc.value.c.d = 449645864
}, 1000)

/**
 * reactive 创建的代理对象能深度监听
 */
let tttr = reactive(abmmd)

console.log(tttr, "tttr")

setTimeout(() => {
  // tttr.c.d = 449645864

  console.log(tttr,"tttr_result")
  console.log(tttf,"tttf_result")
  console.log(tttc,"tttc_result")
}, 2000)

  • vue template
<div>tttf.c.d:{{ tttf.c.d }}</div>
<div>tttc.c.d:{{ tttc.c.d }}</div>
<div>tttr.c.d:{{ tttr.c.d }}</div>

ref创建基本数据和对象的差异原理

ref 创建基本数据是直接通过监听,创建对象数据是返回一个proxy的value,通过reactive创建。

// 判断是不是对象
const isObject = (val) => val !== null && typeof val === 'object';

// ref的函数
function ref(val) {
  // 此处源码中为了保持一致,在对象情况下也做了用value 访问的情况value->proxy对象
  // 我们在对象情况下就不在使用value 访问
  return isObject(val) ? reactive(val) : new refObj(val);
}

//创建响应式对象
class refObj {
  constructor(val) {
    this._value = val;
  }
  get value() {
    // 在第一次执行之后触发get来收集依赖
    track(this, 'value');
    return this._value;
  }
  set value(newVal) {
    console.log(newVal);
    this._value = newVal;
    trigger(this, 'value');
  }
};

标签:console,log,对象,value,toref,功能测试,unref,let,ref
From: https://www.cnblogs.com/jocongmin/p/18282744

相关文章

  • 全新升级!中央集中式架构功能测试为新车型保驾护航
        “软件定义汽车”新时代下,整车电气电气架构向中央-区域集中式发展已成为行业共识,车型架构的变革带来更复杂的整车功能定义、更多的新技术的应用(如SOA服务化、智能配电等)和更短的车型研发周期,对整车和新产品研发的质量验证提出更高的要求。    作为国内较早开......
  • Vue3——toRef和toRefs
    toRef和toRefs作用toRef和toRefs功能相同,都是将一个响应式对象中的每个属性,转成ref对象,但是toRefs可以批量转换。语法:>lettemp=toRef(对象.属性名)和let{temp1,temp2,temp3,...}=toRefs(对象)模版中使用运行结果代码<template><divclass="root"><h......
  • 功能测试
    主流技能功能测试,自动化测试,接口测试,测试分类单元测试,集成测试(接口测试),系统测试(功能和非功能测试),验收测试(用户内测版本)黑盒测试(系统测试,看不到源代码,功能可见)灰盒测试(接口测试,部分源代码可见,功能不可见)白盒测试(源代码可见,功能不可见)专项测试:性能,安全质量模型功能(数......
  • 基于Selenium+webdriver对Web应用系统进行功能测试
    以Java格式的脚本,在JUnit框架上执行和调试这些脚本。项目语言与架构选项为在pom.xml中添加的依赖在kotlin目录中添加Java类,开始编写测试代码:找到chrome的版本并下载对应版本的chromedriver,在setProperty中将chromedriver.exe的路径完善后就可以开始测试。chromedriver全版......
  • 车载T-Box逻辑功能测试方案
    T-Box(TelematicsBox,车载终端)是一种安装在汽车上的控制器,用于实现车辆的远程监控、数据采集、通信和控制等功能。T-Box在汽车网联中扮演着重要的角色,它是连接汽车与外部世界的关键节点之一。通过T-Box,车辆可以与云端服务器、其他车辆、交通基础设施以及智能设备进行通信和数据交换......
  • 6年心得,从功能测试到测试开发,送给在测试路上一路走到黑的你。
    蓦然回首,软件测试风风雨雨的这就几年,起初每天的工作只是鼠标点点点,我还真不知道怎么办,闲的时候真的怀疑自己的存在价值,每天拿着7000的工资,飘荡在繁华的深圳,吃不饱也饿不死,未来一片茫然……时间荏苒,工作越久越能体会测试才不是这么简单,假如只会点点鼠标,并不能走得长远,工资也渐渐地......
  • 会充电的CANoe-赋能新能源汽车,高效完成即插即充(PnC)智能充电功能测试
     ISO15118-2标准中描述的PnC功能,可以实现插枪即充电,识别、计费信息、充电参数都通过高级别通信在EV和EVSE之间自动交换。简化了电动汽车的充电过程,提高了用户体验,为电动汽车行业带来了更智能、更便捷的充电解决方案。 然而,电动汽车和充电站之间要实现自动通信和计费,必须交......
  • 功能测试 联调测试 回归测试 三个测试关注的点有什么不一样?
     功能测试、联调测试和回归测试是软件开发周期中不同阶段的测试类型,它们关注的点有所不同:功能测试:关注点:功能测试主要关注软件的功能是否按照需求规格书或者用户期望的方式正常工作。测试人员会验证每个功能是否按照设计进行操作,是否符合预期的行为。执行......
  • 2.功能测试
    常用参数-count运行的次数默认为1多次运行gotest命令,可以看到输出的结果中有了一个(cache)标识,通过使用参数-count=1可以达到“禁用缓存”的效果-v通过使用参数-v可以从输出结果中清晰的看到每个测试用例的运行情况-timeout测试运行超时时间默认为10分钟......
  • 银行功能测试之权限测试
    通常一个用户会有多个角色,也会有有兼职机构。有这么一个需求,一个菜单只允许某个岗位可以查看以及相应的增删改查,而这个岗位只能总行管理员配置,分行管理员是不可以配置的首先分析这个岗位只能总行管理员配置,那么分行管理员是不允许选择这个岗位的,但是同时如果总行管理员给用户赋......