render到底是什么,该如何使用它
一.前言
1.vue程序的运行过程:模板 -> 进行编译 -> 生成ast树 -> 数据绑定 -> 生成render函数 -> 成虚拟dom树 -> 真实dom树
模板:Vue的模板基于纯HTML,基于Vue的模板语法,我们可以比较方便地声明数据和UI的关系。
AST:AST是Abstract Syntax Tree的简称,俗称‘抽象语法树’它是一种数据结构。是源代码语法结构的一种抽象表示。它以树状的形式表现编程语言的语法结构,树上的每个节点都表示源代码中的一种结构。
渲染函数:渲染函数是用来生成Virtual DOM的。Vue推荐使用模板来构建我们的应用界面,在底层实现中Vue会将模板编译成渲染函数,当然我们也可以不写模板,直接写渲染函数,以获得更好的控制 (这部分是我们今天主要要了解和学习的部分)。
Dom树:当浏览器读到HTML代码时,它会建立一个DOM节点树来保持追踪,如果你会画一张家谱树来追踪家庭成员的发展一样。每个元素都是一个节点。每片文字也是一个节点。甚至注释也都是节点。一个节点就是页面的一个部分。就像家谱树一样,每个节点都可以有孩子节点 (也就是说每个部分可以包含其它的一些部分)。

Virtual DOM:虚拟DOM树就是为了解决浏览器性能问题而被设计出来的,其实就是一个普通的js对象,它是用来描述一段HTML片段的。当页面发生改变Vue会再创建一颗新的虚拟DOM树,前后两颗新旧虚拟DOM树进行对比,Vue通过diff算法,去记录差异的地方将有差异的地方更新到真实的DOM树中,可以大大缩短响应的时间。
综上:
(1)如果直接使用render函数,就省略了模板的编译过程,vue运行的更快。
(2)Vue的编译器在编译模板之后,会把这些模板编译成一个渲染函数。而函数被调用的时候就会渲染并且返回一个虚拟DOM的树。
2.数据更新机制
每个Vue组件都有一个对应的watcher,这个watcher将会在组件render的时候收集组件所依赖的数据(比如data中定义的那些),当依赖有更新的时候,Vue自身的响应式系统就会监听到数据的变化,就会重新渲染(也就是从头重新执行一遍直到render函数走完),当重新进行渲染之后,会生成一个新的虚拟树,将新的树与旧的树进行对比,就可以最终得出应施加到真实DOM上的改动。
二.Render函数
1.使用场景:render 函数(渲染函数) 跟 template 一样都是创建 html 模板的,但是有些场景中用 template 实现起来代码冗长繁琐而且有大量重复,这时候就可以用 render 函数。
2.render函数介绍
render函数的返回值:VNode(即:虚拟节点),也就是我们要渲染的节点。
render 函数的参数:createElement 是 render 函数 的参数,它本身也是个函数,并且有三个参数如下。
createElement(参数1,参数2,参数3);
参数1:想渲染的html标签名或者组件名不区分大小写,用引号括起来,例如:'div','span',。---必填
参数2:该dom节点的配置的数据对象,如id,class,style,事件等(具体请参考文档【深入数据对象】的描述)。---非必填
参数3:是一个数组,数组里面存放子元素。若还要创建子元素,则可以在数组中继续写createElement函数。---非必填
(有关createElement具体使用,例如添加事件监听,如何使用插槽等,都可参考Vue官方文档)
3.具体用法
(1)用法一:基本使用场景,也就是render函数中只传入一个参数-createElement。
格式为:render: function (createElement)
实例如:见代码

引入jsx插件的写法(需要安装一个插件,写起来更接近template中的代码):

(2)用法二:render函数传入两个参数------(见官方文档中【函数式组件】的描述)
格式为:render: function (createElement, context)
其中context是一个对象,组件需要的一切都是通过它来传递的。
render到底是什么,该如何使用它的更多相关文章
- render()到底渲染的什么?
1.格式 render(request,"xx.html",{"xx": xx}) 2.本质 通过模板语言动态渲染字符串(HTML文件) 注意: 1.HTML文 ...
- Angular中ngModel的$render的详解
在我开始着手ngModel的领域时候,有一个问题很令我纠结,那就是$render()到底是做什么的呢?查了很多资料都只是简单的描述一下,这就令我很纠结了,终于在一个阳光明媚的晚上,我终于解决了这个大问 ...
- render的几个应用
1.render可以通过模版语法来渲染字符串,例如变量,标签,for循环,这里就不赘述,我就举个自己印象很深刻灵活应用,看看render到底做了什么,关心什么 注意! 在rander眼里,没有html ...
- 前端开发3年了,竟然不知道什么是 Vue 脚手架?(上)
一.脚手架认识和使用前提 CLI 是什么意思? CLI -- Command-Line Interface 命令行界面,俗称脚手架. 脚手架就是一个大概的框架,是建筑学上的一个概念. 1.1.什么是V ...
- 塞翁失马,焉知非福:由 Styles.Render 所引发 runAllManagedModulesForAllRequests="true" 的思考
最近在使用 MVC 开发的时候,遇到一个对我来说"奇怪的问题",就是使用 BundleTable 进行 CSS.JS 文件绑定,然后使用 Styles.Render.Scripts ...
- node实现http上传文件进度条 -我们到底能走多远系列(37)
我们到底能走多远系列(37) 扯淡: 又到了一年一度的跳槽季,相信你一定准备好了,每每跳槽,总有好多的路让你选,我们的未来也正是这一个个选择机会组合起来的结果,所以尽可能的找出自己想要的是什么再做决定 ...
- node模拟http服务器session机制-我们到底能走多远系列(36)
我们到底能走多远系列(36) 扯淡: 年关将至,总是会在一些时间节点上才感觉时光飞逝,在平时浑浑噩噩的岁月里都浪费掉了太多的宝贵.请珍惜! 主题: 我们在编写http请求处理和响应的代码的时 ...
- 6,render的一些概念和可用库
一,概念解释 什么是渲染?这是高大上的说法,翻译成正常语言,就是把图像缓冲区的数据显示到屏幕的过程,就是渲染. 原理说白了很简单,但实际操作中有太多因素需要考量. OS/硬件提供的加速机制/解码后图像 ...
- 【原】老生常谈-从输入url到页面展示到底发生了什么
刚开始写这篇文章还是挺纠结的,因为网上搜索“从输入url到页面展示到底发生了什么”,你可以搜到一大堆的资料.而且面试这道题基本是必考题,二月份面试的时候,虽然知道这个过程发生了什么,不过当面试官一步步 ...
随机推荐
- Microsoft Office for Mac最新版本安装教程,亲测可用!!!
办公必备的Office工具,它为需要使用 Office 工具的用户和企业设计,让他们可以利用功能强大的 Outlook 来处理电子邮件.日历和通讯录事宜.你所熟知和信赖的 Office 经过更新后,可 ...
- 物理服务器做系统盘centos
linux系统跟windows系统都是操作系统的一种,安装的方法也较多,一样可以通过制作u盘启动盘给linux系统安装.那么具体是如何安装linux?下面就给大家演示下u盘启动盘安装linux系统教程 ...
- fake_useragent—Error occurred during loading data报错问题
问题如下 解决方法: 在自己的临时文件下新建一个fake_useragent_0.1.11.json 把下面的文字复制进去 临时文件 直接输入cmd %temp% 即可进去 { "rando ...
- Sprint产品待办列表的优先级要怎么排?
在梳理产品待办事项列表的过程中,产品负责人需要先做优先级排列,保证我们 在一定的时间盒内能够交付需要优先级最高.最具价值的用户故事. 那这个用户故事的优先级要怎么排列,我们怎样选择用户故事的实现顺序? ...
- TDSQL-C 真·秒级启停:连接断了,又没断
你听过多少款无服务器架构(Serverless)数据库? 什么是Serverless呢?简单理解,Serverless 分为 FaaS 和 BaaS 两个部分,其中 FaaS 指的是函数即服务,Baa ...
- 万字干货_JDK动态代理及其源码解析 拿捏了
目录 代理模式 静态代理 静态代理和动态代理的区别?什么是静态.动态? 静态代理的使用步骤 示例 静态代理的缺陷 解决静态代理的缺陷的思路 JDK动态代理 JDK 动态代理类使用步骤 示例 底层原理 ...
- RocketMQ 在物流行业的应用与运维
本文作者:丁威 - 中通快递资深架构师,<RocketMQ技术内幕>作者,Apache RocketMQ社区首席布道师,公众号「中间件兴趣圈」维护者. 01 物流行业的业务特点 物流行业有 ...
- github及git入门笔记
1 github https://github.com/ 1.1 github注册 进入官方 https://github.com/ 首页,点击如下图片中sign up按钮,按照提示信息注册即可. 注 ...
- 【Hadoop学习】下:MapReduce程序编写、Hadoop序列化、框架原理、Yarn组件、设置队列
一.MapReduce概述 1.定义 编程框架,组成分布式运算程序,运行在集群上 2.特点 优点:易于编程.扩展性.容错性(内部完成).海量数据离线处理 缺点:非实时.不擅长流式计算.不擅长DAG有向 ...
- Curve 块存储应用实践 -- iSCSI
Curve 是云原生计算基金会 (CNCF) Sandbox 项目,是网易数帆发起开源的高性能.易运维.云原生的分布式存储系统. 为了让大家更容易使用以及了解 Curve,我们期望接下来通过系列应用实 ...