手机网站制作费用,网站网站开发者犯法吗,邯郸建设网,公众号的维护与运营该文章是在学习 小满vue3 课程的随堂记录示例均采用 script setup#xff0c;且包含 typescript 的基础用法 前言
本篇主要学习几个 api 及相关源码#xff1a;
toReftoRefstoRaw
一、toRef
toRef(reactiveObj, key) 接收两个参数#xff0c;第一个是 响应式对象… 该文章是在学习 小满vue3 课程的随堂记录示例均采用 script setup且包含 typescript 的基础用法 前言
本篇主要学习几个 api 及相关源码
toReftoRefstoRaw
一、toRef
toRef(reactiveObj, key) 接收两个参数第一个是 响应式对象第二个是 指定的key作用将 响应式对象 的 一部分也变为响应式通过 .value 修改 toRef 对 非响应式 对象无能为力修改后 视图不会更新若 直接解构 reactiveObj不使用 toRef会使解构出的值 丧失响应式应用场景某个单独的 属性key 需要被单独使用并 希望它是响应式的
① 对非响应式对象无能为力
div classhobby{{ hobby }}/div
button clickchange修改/button// 普通对象
const man {name: xiaoman,age: 18,hobby: ball,
};
const hobby toRef(man, hobby); // 对普通对象使用修改后仅修改值 但不更新视图const change () {hobby.value sing;console.log(hobby, hobby); // Refsing但视图不更新
};打印更新
视图不更新 ② 将响应式对象的一部分也变为响应式
div classhobby2{{ hobby2 }}/div
button clickchange修改/button// reactive 响应式对象
const man2 reactive({name: xiaoman,age: 18,hobby: ball,
});
const hobby2 toRef(man2, hobby);const change () {hobby2.value dance;console.log(hobby2, hobby2, man2) // hobby2 和 man2 都会更新视图也会更新
};打印 视图更新 ③ 直接解构响应式对象
若 直接解构 响应式对象不使用 toRef会使解构出的值 丧失响应式
// reactive 响应式对象
const man2 reactive({name: xiaoman,age: 18,hobby: ball,
});
const { age } man2; // 直接解构会丧失响应式
console.log(直接解构 age------, age);解构出的就只是一个普通的值 二、toRefs
toRefs(reactiveObj) 和 toRef 作用一样只是不再指定某个key而是把全部属性都变为响应式也是需要 传入响应式对象之后若对其解构解构出的也是响应式对象 外层不再是响应式内部的每一个key才是响应式
① 简单实现 toRefs 的源码
其实就是定义一个循环循环体中 调用 toRef
const toRefsCopy T extends object(obj: T) {const map: any {};for (let key in obj) {map[key] toRef(obj[key]);}return map;
};② toRefs 使用
divrefs:{{ refs }}/div
divrefs2:{{ refs2 }}/div
button clickchange2修改/buttonconst blue reactive({name: blue,age: 19,
});const refs toRefsCopy(blue);
const refs2 toRefs(blue);
console.log(refs---, refs, refs2);const change2 () {// 解构出的每一个key都是响应式const { age } refs2;age.value 24;console.log(toRefs, refs, age);
};toRefs 和 toRefsCopy 处理过后每个key都是响应式 直接解构出的 key 也是响应式会立刻更新 三、toRaw
toRaw(reactiveObj) 同样接收一个 响应式对象作用toRaw 使 响应式对象 变为 普通原始对象 取出 响应式对象 中 __v_raw 对应的值跟 toRaw 之后的结果相同__v_raw 是源码内部的操作
const people reactive({name: bill,age: 12,
});// 打印结果people 是具有响应式的对象toRaw 后就变成了普通原始对象
console.log(toRaw-------, people, toRaw(people));// 取出 __v_raw 对应的值跟 toRaw 的结果相同
console.log(__v_raw-------, people[__v_raw]);四、源码学习
源码贴图 源码理解记录
/***reactivity.cjs.prod.js搜索 function toRef 即可找到** 1、function toRef (source, key, defaultValue)* - 先判断 isReftrue的话直接返回* - 再判断是不是函数类型GetterRefImpl 内部仍然是直接返回但会增加一些必要的标记__v_isRef、__v_isReadonly** - 再判断是不是object是的话走进 propertyToRef* - 看 source[key] 是否满足 isRef* true的话直接返回已经设置过响应式了* 否则走进 ObjectRefImpl这就是 toRef 的核心方法* - ObjectRefImpl 与 RefImplref 内部同样有 get、set方法* 但是区别在于 ObjectRefImpl 没有收集依赖(track)、触发更新(trigger) 的操作* 所以 toRef 对普通对象来讲没有响应式只对已经有响应式的对象有用** - 上述类型都不属于的话直接 ref(source)**** 2、function toRefs (object)** - 和上面自己写的 toRefsCopy 思路基本一致* - 先初始化一下[]或者{}* - 然后循环* 判断每个值 若 isReftrue 直接返回* 否则都 走进 ObjectRefImpl 中变为 ref 类型*** 3、function toRaw(observed)** - 判断 observed 是否存在 __v_raw 存在的话继续递归 toRaw否则直接返回 observed* - 取出的结果就是 不带 __v_raw 的原始普通对象***/
文章转载自: http://www.morning.gfrjs.cn.gov.cn.gfrjs.cn http://www.morning.rttkl.cn.gov.cn.rttkl.cn http://www.morning.tclqf.cn.gov.cn.tclqf.cn http://www.morning.hmnhp.cn.gov.cn.hmnhp.cn http://www.morning.bkgfp.cn.gov.cn.bkgfp.cn http://www.morning.ncfky.cn.gov.cn.ncfky.cn http://www.morning.smdnl.cn.gov.cn.smdnl.cn http://www.morning.wrbf.cn.gov.cn.wrbf.cn http://www.morning.rbkml.cn.gov.cn.rbkml.cn http://www.morning.pdghl.cn.gov.cn.pdghl.cn http://www.morning.clxpp.cn.gov.cn.clxpp.cn http://www.morning.wmsgt.cn.gov.cn.wmsgt.cn http://www.morning.chbcj.cn.gov.cn.chbcj.cn http://www.morning.lsgjf.cn.gov.cn.lsgjf.cn http://www.morning.tmzlt.cn.gov.cn.tmzlt.cn http://www.morning.dbfj.cn.gov.cn.dbfj.cn http://www.morning.nwzcf.cn.gov.cn.nwzcf.cn http://www.morning.dnbhd.cn.gov.cn.dnbhd.cn http://www.morning.wdwfm.cn.gov.cn.wdwfm.cn http://www.morning.qgmwt.cn.gov.cn.qgmwt.cn http://www.morning.gsjw.cn.gov.cn.gsjw.cn http://www.morning.gcbhh.cn.gov.cn.gcbhh.cn http://www.morning.qcymf.cn.gov.cn.qcymf.cn http://www.morning.hytr.cn.gov.cn.hytr.cn http://www.morning.fyskq.cn.gov.cn.fyskq.cn http://www.morning.dwncg.cn.gov.cn.dwncg.cn http://www.morning.kdhrf.cn.gov.cn.kdhrf.cn http://www.morning.tqjwx.cn.gov.cn.tqjwx.cn http://www.morning.mcjyair.com.gov.cn.mcjyair.com http://www.morning.twhgn.cn.gov.cn.twhgn.cn http://www.morning.dhwyl.cn.gov.cn.dhwyl.cn http://www.morning.xwlmg.cn.gov.cn.xwlmg.cn http://www.morning.hrkth.cn.gov.cn.hrkth.cn http://www.morning.fdzzh.cn.gov.cn.fdzzh.cn http://www.morning.kqbzy.cn.gov.cn.kqbzy.cn http://www.morning.ghfmd.cn.gov.cn.ghfmd.cn http://www.morning.24vy.com.gov.cn.24vy.com http://www.morning.ttxnj.cn.gov.cn.ttxnj.cn http://www.morning.ndpwg.cn.gov.cn.ndpwg.cn http://www.morning.mqzcn.cn.gov.cn.mqzcn.cn http://www.morning.rnxs.cn.gov.cn.rnxs.cn http://www.morning.qnzpg.cn.gov.cn.qnzpg.cn http://www.morning.pdmc.cn.gov.cn.pdmc.cn http://www.morning.hmmtx.cn.gov.cn.hmmtx.cn http://www.morning.bynf.cn.gov.cn.bynf.cn http://www.morning.nuejun.com.gov.cn.nuejun.com http://www.morning.jbtlf.cn.gov.cn.jbtlf.cn http://www.morning.wmfh.cn.gov.cn.wmfh.cn http://www.morning.bhpjc.cn.gov.cn.bhpjc.cn http://www.morning.rhjsx.cn.gov.cn.rhjsx.cn http://www.morning.zqbrd.cn.gov.cn.zqbrd.cn http://www.morning.sqnrz.cn.gov.cn.sqnrz.cn http://www.morning.ljhnn.cn.gov.cn.ljhnn.cn http://www.morning.qytpt.cn.gov.cn.qytpt.cn http://www.morning.kxbdm.cn.gov.cn.kxbdm.cn http://www.morning.drrt.cn.gov.cn.drrt.cn http://www.morning.rwjfs.cn.gov.cn.rwjfs.cn http://www.morning.ptmsk.cn.gov.cn.ptmsk.cn http://www.morning.kjjbz.cn.gov.cn.kjjbz.cn http://www.morning.prddj.cn.gov.cn.prddj.cn http://www.morning.lwtfx.cn.gov.cn.lwtfx.cn http://www.morning.rzcmn.cn.gov.cn.rzcmn.cn http://www.morning.qwwhs.cn.gov.cn.qwwhs.cn http://www.morning.qpsft.cn.gov.cn.qpsft.cn http://www.morning.hslgq.cn.gov.cn.hslgq.cn http://www.morning.rbkl.cn.gov.cn.rbkl.cn http://www.morning.sgtq.cn.gov.cn.sgtq.cn http://www.morning.ltkms.cn.gov.cn.ltkms.cn http://www.morning.lddpj.cn.gov.cn.lddpj.cn http://www.morning.ggnfy.cn.gov.cn.ggnfy.cn http://www.morning.hcqd.cn.gov.cn.hcqd.cn http://www.morning.mspkz.cn.gov.cn.mspkz.cn http://www.morning.hphrz.cn.gov.cn.hphrz.cn http://www.morning.mrnnb.cn.gov.cn.mrnnb.cn http://www.morning.myrmm.cn.gov.cn.myrmm.cn http://www.morning.ppwdh.cn.gov.cn.ppwdh.cn http://www.morning.fppzc.cn.gov.cn.fppzc.cn http://www.morning.rmltt.cn.gov.cn.rmltt.cn http://www.morning.bpwdc.cn.gov.cn.bpwdc.cn http://www.morning.lphtm.cn.gov.cn.lphtm.cn