Vue 的 _render 方法是实例的一个私有方法,它用来把实例渲染成一个虚拟 Node  ,返回的是一个VNode

在 Vue 的官方文档中介绍了 render 函数的第一个参数是 createElement,那么结合之前的例子:

<div id="app"> {{ message }} </div> 

相当于我们编写如下 render 函数:

render: function (createElement) { return createElement('div', { attrs: { id: 'app' }, }, this.message) } 

再回到 _render 函数中的 render 方法的调用:

vnode = render.call(vm._renderProxy, vm.$createElement) 

可以看到,render 函数中的 createElement 方法就是 vm.$createElement 方法:

export function initRender (vm: Component) { // ... // 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 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. vm.$createElement = (a, b, c, d) => createElement(vm, a, b, c, d, true) } 

实际上,vm.$createElement 方法定义是在执行 initRender 方法的时候,可以看到除了 vm.$createElement 方法,还有一个 vm._c 方法,它是被模板编译成的 render 函数使用,而 vm.$createElement 是用户手写 render 方法使用的, 这俩个方法支持的参数相同,并且内部都调用了 createElement 方法。

#总结

转载于:https://www.cnblogs.com/guangzhou11/p/11298032.html

Vue.js 技术揭秘学习 (3) render相关推荐

  1. Vue.js 技术揭秘学习 (2) Vue 实例挂载的实现

    Vue 中我们是通过 $mount 实例方法去挂载 vm 的 $mount 方法实际上会去调用 mountComponent 方法,mountComponent 核心就是先实例化一个渲染Watcher ...

  2. Vue.js 技术揭秘学习 (1) new Vue 发生了什么

    Vue 初始化主要就干了几件事情,合并配置,初始化生命周期,初始化事件中心,初始化渲染,初始化 data.props.computed.watcher 等等. 转载于:https://www.cnbl ...

  3. Vue.js 技术揭秘

    hello, 小伙伴们大家好今天给大家分享的开源项目是Vue.js源码解析,如果有学前端的小伙伴可以浏览一下这个开源项目.目前改项目在GitHub上已经有4700多start. 目前有社区有很多 Vu ...

  4. Vue 3 技术揭秘

    作者介绍 muwoo,前端技术专家.曾就职于蚂蚁集团,之前对 Vue 2.x 源码有过深层次的研究和探索,并在 Github 上开源了相关的技术文章:Vue 2.x 技术揭秘,目前已有超过 2k+ s ...

  5. 从后端看Vue-读《Vue.js技术内幕》

    众所周知,作为一名后端懂些Vue.js,是加分项. Vue.js有诸多优点.Vue.js不必为复杂的webpack配置而担心,可以从CDN上下载并使用模板来构建组件.而且在开发中,Vue.js还通过对 ...

  6. 推荐一本Vue源码阅读书籍《Vue.js技术内.幕》

    1. 概述 这幅图大家应该都很清楚: 但这个过程在Vue框架中是如何实现的呢? 是否考虑过如果是自己,该如何设计呢?而这本<Vue.js技术内幕>就是一本非常好的关于Vue框架源码学习的书 ...

  7. Vue.js入门(学习笔记)

    说在前头: 本人为大三在读学生,书写文章的目的是为了对自己掌握的知识和技术进行一定的记录,同时乐于与大家一起分享,因本人资历尚浅,发布的文章难免存在一些错漏之处,还请阅读此文章的大牛们见谅与斧正.若在 ...

  8. 对vue.js技术调研

    一. Vue.js是什么 Vue.js (vue读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式 JavaScript 框架.与其它大型框架不同的是,Vue 被设计为可以自底向上 ...

  9. 《Vue.js技术内幕》读后感

    作为一个 "成熟" 的前端开发,Vue框架是必须熟练掌握的,因为之前学习过黄轶老师慕课网Vue2的源码课<Vue技术揭秘>,大概刷了两遍,真的是受益匪浅,学到了太多,后 ...

最新文章

  1. mysql导出数据库数据及表结构
  2. 一个学渣三次面试阿里之路
  3. nodejs-模块系统
  4. SAP Spartacus 的页面布局
  5. C++11 —— 简易的旋转锁类
  6. qtcreator下拉列表怎么制作_设置EXCEL动态下拉菜单,只需要一个组合键,新手也能快速掌握...
  7. 助AI研究社群发出内建18种预先训练模型工具
  8. RandomAccessFile读写txt文件中文乱码
  9. VB 创建快捷方式函数(可带参数)
  10. Socket 编程之_TCP ☎☎☎
  11. 从小白到区块链工程师:第一阶段:Go语言的HelloWorld初始(2)
  12. 计算机毕业论文基于Python实现的仓库库存管理系统进销存储系统
  13. C#应用程序界面开发基础——窗体控制(4)——选择类控件(有部分地方没明白)
  14. module ‘cv2‘ has no attribute ‘face‘已安装仍报错解决
  15. 机器学习算法笔记之K近邻算法(KNeighborsClassifier)
  16. 中国枪械店软件市场趋势报告、技术动态创新及市场预测
  17. 各个 .NET 平台的 UI 框架比较
  18. Yii2 event tigger 关于事件的简单使用
  19. 计算机四级网络工程师属于什么职称,计算机四级网络工程师和软考网络工程师有什么区别...
  20. DVWA的部署和教程

热门文章

  1. count/distinct/group by的用法总结
  2. servlet——登录练习(登录页面登录请求登录请求处理)
  3. JDK、J2EE、J2SE、J2ME的区别
  4. MySQL 最新8.0版本windows系统下数据库的安装、配置与使用实例演示,客户端使用ip连接数据库失败问题处理
  5. Python+selenium 自动化-通过窗口名切换窗口,如何获取当前窗口的title窗口名
  6. 第八周项目实践2 建立连串算法库
  7. 二维矩阵与二维矩阵之间的卷积
  8. 不符合条件重新输入 c语言,2016年计算机考试上机应试技巧
  9. el-button在表格操作行可以写成type=text'形式,这样有链接手型。
  10. Android NDK环境搭建