最新要闻
- 环球快讯:NVIDIA突然复活SLI!但不是你想的那样
- 每日看点!比尔·盖茨谈ChatGPT 赞其1980年以来最革命性技术进步
- 天天即时:爱子飞机上死亡:母亲怒告世界最大航司美国航空
- 谷歌的“GPT”终于憋出来了!但是 也不比百度强多少啊
- 当前热议!抖音救人一命!男子发头孢配酒视频获救:客服教科书式报警
- 头条:交700个税的工资多少_j700
- 天天热点!苹果官方推荐!iNote灵感笔记新版发布:超紧凑模式来了
- 热讯:金士顿无敌了!拿下2022年全渠道SSD市场占有率第一
- 高德、口碑正式合并:阿里旗下本地到店业务将统一整合
- 热推荐:国科微:目前晶圆产能较前两年已趋于缓和
- 世界快看点丨加快步伐!腾讯高管:“生成式AI”或纳入微信和QQ
- 天津金逸影城
- 3GB显存被封杀!《光环无限》都不让玩
- Opera浏览器推送97.0.4719.26更新:集成ChatGPT与AI总结功能
- 世界速递!碧桂园打造湖湘人居典范 护航品质生活
- 3599元 铭凡NUCG5迷你主机上架:碳纤维机身、下压式散热
广告
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
Vue——initRender【八】
【资料图】
前言
前面我们简单的了解了 vue 初始化时的一些大概的流程,这里我们详细的了解下具体的内容;
内容
这一块主要围绕init.ts
中的initRender
进行剖析,参数合并完成之后就开始了初始化生命周期。
initRender
initRender
位于src/core/instance/render.ts
export function initRender(vm: Component) { vm._vnode = null // the root of the child tree vm._staticTrees = null // v-once cached trees const options = vm.$options const parentVnode = (vm.$vnode = options._parentVnode!) // the placeholder node in parent tree const renderContext = parentVnode && (parentVnode.context as Component) // 插槽 // https://v2.cn.vuejs.org/v2/api/#vm-slots vm.$slots = resolveSlots(options._renderChildren, renderContext) // 作用域插槽 // https://v2.cn.vuejs.org/v2/api/#vm-scopedSlots vm.$scopedSlots = parentVnode ? normalizeScopedSlots( vm.$parent!, parentVnode.data!.scopedSlots, vm.$slots ) : emptyObject // bind the createElement fn to this instance // so that we get proper render context inside it. // args order: tag, data, children, normalizationType, alwaysNormalize // internal version is used by render functions compiled from templates // @ts-expect-error // 将createElement函数绑定到实例上,以保证正确的上下文渲染顺序, // 内部版本使用的渲染函数来自模板编译 vm._c = (a, b, c, d) => createElement(vm, a, b, c, d, false) // normalization is always applied for the public version, used in // user-written render functions. // 公共版本使用用户编写的渲染函数 // @ts-expect-error vm.$createElement = (a, b, c, d) => createElement(vm, a, b, c, d, true) // $attrs & $listeners are exposed for easier HOC creation. // they need to be reactive so that HOCs using them are always updated const parentData = parentVnode && parentVnode.data /* istanbul ignore else */ if (__DEV__) { defineReactive( vm, "$attrs", (parentData && parentData.attrs) || emptyObject, () => { !isUpdatingChildComponent && warn(`$attrs is readonly.`, vm) }, true ) defineReactive( vm, "$listeners", options._parentListeners || emptyObject, () => { !isUpdatingChildComponent && warn(`$listeners is readonly.`, vm) }, true ) } else { // 通过defineReactive将$attrs和$listeners设置为响应式数据 | 这一块后面再详说 // emptyObject 返回一个被冻结的对象空对象,不能被修改其原型也不能被修改 // 包含了父作用域中不作为 prop 被识别 (且获取) 的 attribute 绑定 (class 和 style 除外)。 // 当一个组件没有声明任何 prop 时,这里会包含所有父作用域的绑定(class 和 style 除外), // 并且可以通过 v-bind="$attrs" 传入内部组件——在创建高级别的组件时非常有用。 // https://v2.cn.vuejs.org/v2/api/?#vm-attrs defineReactive( vm, "$attrs", (parentData && parentData.attrs) || emptyObject, null, true ) // 包含了父作用域中的 (不含 .native 修饰器的) v-on 事件监听器。 // 它可以通过 v-on="$listeners" 传入内部组件——在创建更高层次的组件时非常有用。 // https://v2.cn.vuejs.org/v2/api/?#vm-listeners defineReactive( vm, "$listeners", options._parentListeners || emptyObject, null, true ) }}
resolveSlots
resolveSlots
位于src/core/instance/render-helpers/resolve-slots.ts
** * Runtime helper for resolving raw children VNodes into a slot object. * * 将children VNodes 转化为 slot 对象 */export function resolveSlots( children: Array | null | undefined, context: Component | null): { [key: string]: Array } { // 如果不存在子节点直接返回空对象 if (!children || !children.length) { return {} } // 定义一个slots空对象,存放slot const slots: Record = {} // 对子节点进行遍历 for (let i = 0, l = children.length; i < l; i++) { const child = children[i] const data = child.data // remove slot attribute if the node is resolved as a Vue slot node // 如果节点是slot节点的话就移除slot的属性 if (data && data.attrs && data.attrs.slot) { // 删除该节点attrs的slot delete data.attrs.slot } // named slots should only be respected if the vnode was rendered in the // same context. // 判断是否为具名插槽 // https://v2.cn.vuejs.org/v2/guide/components-slots.html#%E5%85%B7%E5%90%8D%E6%8F%92%E6%A7%BD if ( (child.context === context || child.fnContext === context) && data && data.slot != null ) { // 获取插槽的名字 const name = data.slot // 插槽名字不存在则赋值为空数组 const slot = slots[name] || (slots[name] = []) // 如果是template元素将child.children添加到数组中 if (child.tag === "template") { slot.push.apply(slot, child.children || []) } else { slot.push(child) } } else { // 返回匿名的slot,名字是default ;(slots.default || (slots.default = [])).push(child) } } // ignore slots that contains only whitespace // 忽略空白内容的插槽 for (const name in slots) { // 利用every检测指定的slots数组下的所有结果是否能够通过isWhitespace的测试 // 全部通过才会返回true if (slots[name].every(isWhitespace)) { delete slots[name] } } return slots}function isWhitespace(node: VNode): boolean { return (node.isComment && !node.asyncFactory) || node.text === " "}
关键词:
天天简讯:使用C#开发微信公众号对接ChatGPT和DALL-E
今日关注:关于人工智能的思考,写在chatGPT爆火之时
Vue——initRender【八】
环球快讯:NVIDIA突然复活SLI!但不是你想的那样
每日看点!比尔·盖茨谈ChatGPT 赞其1980年以来最革命性技术进步
天天即时:爱子飞机上死亡:母亲怒告世界最大航司美国航空
谷歌的“GPT”终于憋出来了!但是 也不比百度强多少啊
当前热议!抖音救人一命!男子发头孢配酒视频获救:客服教科书式报警
头条:交700个税的工资多少_j700
今日讯!SEO优化:友情链接!真心换真心?
通过 poe 免费使用ChatGPT、GPT-4
天天观察:71.C++标准库类型string
CTAS建表时报错ORA-65114
Go HTTP编程
天天热点!苹果官方推荐!iNote灵感笔记新版发布:超紧凑模式来了
热讯:金士顿无敌了!拿下2022年全渠道SSD市场占有率第一
高德、口碑正式合并:阿里旗下本地到店业务将统一整合
热推荐:国科微:目前晶圆产能较前两年已趋于缓和
全球最新:关于基于AWS-Cli的方式对RDS资源批量添加tag的方法
全球微速讯:小红书去水印技巧合集(亲测有效!!!)
每日热点:Git基本使用
RHEL无法配置网关问题一则
世界快看点丨加快步伐!腾讯高管:“生成式AI”或纳入微信和QQ
天津金逸影城
2023年3月22日(软件工程日报)
阿里云大使和代理商的优惠的区别与选择
动态焦点:美债市场危机四伏 “安全资产”吸引力或进一步下降
3GB显存被封杀!《光环无限》都不让玩
Opera浏览器推送97.0.4719.26更新:集成ChatGPT与AI总结功能
世界速递!碧桂园打造湖湘人居典范 护航品质生活
世界新动态:70.C++ using的三种用法详解
环球资讯:农业银行发行700亿元二级资本债进一步增强资本实力
3599元 铭凡NUCG5迷你主机上架:碳纤维机身、下压式散热
世界百事通!比RTX 4080小一半!NVIDIA发布RTX 4000 SFF半高卡:功耗仅70瓦
【世界新要闻】专家:沙尘天气里最好别戴隐形眼镜
焦点播报:成龙和甄子丹"打架"谁会赢?甄子丹:我老了 他更老
性价比更高 有哪些散片CPU值得入手?
每日精选:Swift 备忘清单_开发速查表分享
全球信息:利用“姿态相似度比较”功能,对运动(动作)识别检测“秒”适配
国民第一APP坐实了 微信月活破13亿无可匹敌
天天时讯:堆料最多的小米手机!曝小米13 Ultra最高配1TB UFS 4.0闪存
iPhone 15 Pro工业设计敲定!这外观果粉会打多少分?
1499元!微星发布MD271UL 4K显示器:P3色域可达99%
399元1TB 速度5000MB/s!影驰星曜X4 PRO SSD图赏
世界热推荐:IDC 预计 2023 年全球可穿戴设备出货量预计将出现反弹
微头条丨低代码开发,一场深度的IT效率革命
混合多云第二课——混合技术如何每年为京东节省上亿元成本?
【天天新视野】记录--我在前端干工地(three.js)
数据库系统原理之数据库编程
当前滚动:债市日报:3月22日
女子应聘被HR质疑23岁用苹果手机:称其年纪小 手机贵
天天速讯:四川一高校放7天春假 鼓励大家去恋爱!网友:坚持一个四川原则
环球速递!腾讯2022年人均年薪102.5万!一年增加近20万
世界资讯:“长胡子”了 比亚迪海豚泰国版发布:售价约16万人民币
【全球新视野】被马化腾视为腾讯希望!微信视频号使用时长已超朋友圈
世界看热讯:农历中的惊蛰到底有什么寓意?
天天快讯:Kruise Rollout v0.3.0:教你玩转 Deployment 分批发布和流量灰度
ThreadPool实现机制
焦点热议:nodejs处理嵌套对象的npm包:dot-prop
中国西北地区发现广泛分布的侏罗纪被子植物化石
3年陈花香白牡丹:董德福鼎白茶200g装128元大促(200元券)
环球快看:188GB显存 800W功耗!NVIDIA发布H100 NVL加速卡:ChatGPT提速2倍
世界新资讯:美国两囚犯用牙刷挖洞越狱成功:墙内钢筋松了!职能部门颜面扫地
当前观察:9岁女孩豪掷18.9万打赏游戏主播 偷偷记下密码还删除转账记录
天天速讯:新能源汽车高速没电竟然倒车回服务区充电 后方车辆纷纷避让
Geyser - Minecraft Server 基岩版与Java版互通教程
世界速讯:Rust 知识积累(5)
全球热文:CSIG企业行-走进合合信息成功举行,聚焦生成式人工智能、智能文档处理前沿热点
环球今日讯!webrtc QOS笔记三 RTT计算,SRS增加XR
你可能不那么知道的Tomcat生命周期管理 | 博学谷狂野架构师
全球新资讯:国家药监局:2022年抽检11类化妆品20368批次产品 合格率97.60%
每日速看!【财经分析】投资收益拖累2022年券商业绩 投行业务景气度仍处于高位
【聚看点】澳弘电子(605058.SH):年产高精密度多层板、高密度互连积层板120万平方米建设项目及研发中心升级改造项目结项
真我GT Neo5 SE“最终幻想”配色回归:赛博朋克风满满
当前消息!《黑暗荣耀2》蝉联网飞电视剧全球榜第一:观看时间过亿
当前热门:又一日系即将退出中国?广汽三菱否认传闻:正常运转
世界看点:被谷歌商店下架 拼多多驳斥恶意软件指控!
世界聚焦:上市五年市值缩水99.6%!昔日“明星”趣头条宣布退市
新资讯:火山引擎 VeDI 零售行业解决方案 聚焦精准营销场景提升品牌转化
面试官:ThreadLocal 为什么会内存泄漏吗?是怎么产生的?面试必问!
JavaSE笔记之注解和反射(含案例代码)
当前速递!Android BLE 广播定制
环球报道:关于asp.net core filters生命周期的探究
今头条!北方多地迎沙尘!长春直接下“泥雨”:汽车变泥车
环球速讯:OPPO、小米、vivo联盟:跨品牌一键换机新增第三方应用迁移
最新消息:史上最强骁龙7系 真我GT Neo5 SE跑分过百万:16+1TB存储确认
世界今热点:孤立森林(IForest)代码实现及与PyOD对比
最资讯丨three.js加载环境贴图
天天热讯:java中同步和异步的区别
今日关注:Alphaliner:2月底港口停运船比率达6.4% 增至去年同期3倍
4月上映!《长空之王》新预告出炉:王一博驾驶歼20一飞冲天
世界今头条!自嗨锅自热煲仔饭4桶到手价32.8元:15分钟速烹美食
今年以来最强沙尘来袭!你的城市在下雨 他的城市在下泥
邓紫棋你把我灌醉高音最高是多少?邓紫棋你把我灌醉歌词
苏菲日记是什么?苏菲日记的读后感怎么写?
strict怎么读?strict的反义词是什么?
主题班会的开场白有什么要求?主题班会的开场白怎么写?
河南洛阳旅游景点排名前十名有哪些?河南洛阳美食排行榜前十名
当前简讯:一种基于实时大数据的图指标解决方案
【天天报资讯】智能零售柜商品检测软件(Python+YOLOv5深度学习模型+清新界面)