网站首页 > 开源技术 正文
我们打开“src/core/instance/render.js”文件,代码如下:
Vue.prototype._render = function (): VNode {
const vm: Component = this
const { render, _parentVnode } = vm.$options
if (_parentVnode) {
vm.$scopedSlots = normalizeScopedSlots(_parentVnode.data.scopedSlots,vm.$slots, vm.$scopedSlots)
}
vm.$vnode = _parentVnode
// render self
let vnode
try {
currentRenderingInstance = vm
vnode = render.call(vm._renderProxy, vm.$createElement)
} catch (e) {
// ...省略部分代码
} finally {
currentRenderingInstance = null
}
if (Array.isArray(vnode) && vnode.length === 1) {
vnode = vnode[0]
}
if (!(vnode instanceof VNode)) {
if (process.env.NODE_ENV !== 'production' && Array.isArray(vnode)) {
warn( 'Multiple root nodes returned from render function. Render function ' +'should return a single root node.', vm)
}
vnode = createEmptyVNode()
}
vnode.parent = _parentVnode
return vnode
}
我们接下来拆分一下该函数的代码:
const { render, _parentVnode } = vm.$options
if (_parentVnode) {
vm.$scopedSlots = normalizeScopedSlots(_parentVnode.data.scopedSlots,vm.$slots, vm.$scopedSlots)
}
vm.$vnode = _parentVnode
首先是看看是否存在 “_parentVnode” ,如果存在,就调用 “normalizeScopedSlots” 处理 “slot”参数。
vnode = render.call(vm._renderProxy, vm.$createElement)
紧接着调用 render 函数生成 vnode 虚拟节点。render函数代码如下:
最后生成的vnode结构如下:
if (Array.isArray(vnode) && vnode.length === 1) {
vnode = vnode[0]
}
if (!(vnode instanceof VNode)) {
if (process.env.NODE_ENV !== 'production' && Array.isArray(vnode)) {
warn( 'Multiple root nodes returned from render function. Render function ' +'should return a single root node.', vm)
}
vnode = c
}
以上就是生成vnode之后的处理。
1、取出vnode对象的打一个(vnode[0])
2、判断vnode 是否为 Vnode的实例化对象,如果不是将新建一个空的vnode (createEmptyVNode())
vnode.parent = _parentVnode
return vnode
最后是设置vnode的父级,然后返回vnode。
猜你喜欢
- 2024-12-06 游戏编程 | Three.js 加载STL模型
- 2024-12-06 flask web服务器的开发就这样简单的入门
- 2024-12-06 前端实战:如何快速在你的vue/react应用中实现服务端渲染(ssr)
- 2024-12-06 初识 JavaScript 第一篇及解释器和编译器
- 2024-12-06 一、nextjs 服务端渲染及环境搭建
- 2024-12-06 一篇文章,教你学会Vue-CLI 插件开发【Vue进阶篇】
- 2024-12-06 Three.js在工业设备模型演示与监控中的应用:三维可视化渲染效果
- 2024-12-06 threejs渲染高级感可视化涡轮模型
- 2024-12-06 如何让Threejs的canvas背景透明?
- 2024-12-06 服务端渲染提升WEB应用体验
你 发表评论:
欢迎- 05-16东契奇:DFS训练时喷了我很多垃圾话 我不懂他为什么比赛不这么干
- 05-16这两球很伤!詹姆斯空篮拉杆不中 DFS接里夫斯传球空接也没放进
- 05-16湖人自媒体调查:89%球迷希望DFS回归79%希望詹姆斯回归
- 05-16Shams:湖人得到全能球员DFS 节省了1500万奢侈税&薪金空间更灵活
- 05-16G5湖人胜率更高!詹姆斯不满判罚,DFS谈5人打满下半场:这很艰难
- 05-16DFS:当东契奇进入状态 所有防守者在他面前都像个圆锥桶
- 05-16上一场9中6!DFS:不能让纳兹-里德这样的球员那么轻松地投三分
- 05-16WIDER FACE评测结果出炉:滴滴人脸检测DFS算法获世界第一
- 最近发表
-
- 东契奇:DFS训练时喷了我很多垃圾话 我不懂他为什么比赛不这么干
- 这两球很伤!詹姆斯空篮拉杆不中 DFS接里夫斯传球空接也没放进
- 湖人自媒体调查:89%球迷希望DFS回归79%希望詹姆斯回归
- Shams:湖人得到全能球员DFS 节省了1500万奢侈税&薪金空间更灵活
- G5湖人胜率更高!詹姆斯不满判罚,DFS谈5人打满下半场:这很艰难
- DFS:当东契奇进入状态 所有防守者在他面前都像个圆锥桶
- 上一场9中6!DFS:不能让纳兹-里德这样的球员那么轻松地投三分
- WIDER FACE评测结果出炉:滴滴人脸检测DFS算法获世界第一
- 湖人自媒体调查:89%球迷希望DFS回归 79%希望詹姆斯回归
- 一觉醒来湖人苦盼的纯3D终于到位 DFS能带给紫金军多少帮助
- 标签列表
-
- jdk (81)
- putty (66)
- rufus (78)
- 内网穿透 (89)
- okhttp (70)
- powertoys (74)
- windowsterminal (81)
- netcat (65)
- ghostscript (65)
- veracrypt (65)
- asp.netcore (70)
- wrk (67)
- aspose.words (80)
- itk (80)
- ajaxfileupload.js (66)
- sqlhelper (67)
- express.js (67)
- phpmailer (67)
- xjar (70)
- redisclient (78)
- wakeonlan (66)
- tinygo (85)
- startbbs (72)
- webftp (82)
- vsvim (79)
本文暂时没有评论,来添加一个吧(●'◡'●)