vue的h函数_vue 中的h函数
在讲h函数之前,我们先来了解下虚拟dom:
虚拟dom简单来说就是一个普通的JavaScript对象,包含tag,props,children三个属性。。。
lxc
上边的HTML代码转为虚拟DOM如下:
{
tag:"div",
props:{
id:"app"
},
children:[
{
tag:"p",
props:{
className:"text"
},
children:[
"lxc"
]
}
]
}
该对象就是所谓的虚拟dom,因为dom对象是属性结构,所以使用JavaScript对象就可以简单表示。而原生dom有许多属性、事件,即使创建一个空div也要付出昂贵的代价。而虚拟dom提升性能的点在于DOM发生变化的时候,通过diff算法对比,计算出需要更改的DOM,只对变化的DOM进行操作,而不是更新整个视图。。。
在vue脚手架中,我们经常会看到这样一段代码:
const app = new Vue({
··· ···
render: h => h(App)
})
这个render方法也可以写成这样:
const app = new Vue({
··· ···
render:function(createElement){
return createElment(App)
}
})
h函数就是vue中的createElement方法,这个函数作用就是创建虚拟dom,追踪dom变化的。。。
在看一个例子:写一个main.jsx文件
function getVDOM(){
return (
my name is lxc
)
}
使用bable编译之后:
上边代码:最终html代码会被编译成h函数的渲染形式。返回的是一个虚拟DOM对象,通过diff算法,来追踪自己要如何改变真实DOM。
function h(tag,props,...children){//h函数,返回一个虚拟dom对象
return {
tag,
props:props || {},
children:children.flat()//扁平化数组,降至一维数组
}
}
我们在看下官方文档所说的createElement函数,它返回的实际上不是一个DOM元素,更准确的名字是:createNodeDescription(直译为——创建节点描述),因为它所包含的信息会告诉vue页面上需要渲染什么样的节点,包括其子节点的描述信息。我们把这样的节点叫做:“虚拟节点(virtual node)”,也常简写为:“VNode”。(看了以上的案例相信在看刚这段话思路会更加清晰)
createElment参数(也就是h函数):
我们还是以官方文档的解释来讲,createElment函数接受三个参数,分别是:
参数一:tag(标签名)、组件的选项对象、函数(必选);
参数二:一个对象,标签的属性对应的数据(可选);
参数三:子级虚拟节点,字符串形式或数组形式,子级虚拟节点也需要使用createElement构建。
来一个小例子:
{{name}}
{{age}}
render:function(createElement){
return createElement("div",{id:"lxc"},[this.name,createElement("p",this.age)])
}
上边代码,值得注意的是,如果父元素有文本内容,在render函数中写的时候,内容写在参数三——数组的第一个参数中。(建议大家动手写一写,理解的会更透彻。)
在来一个官方文档例子:
{{item.name}}
No items
data:{
items:[{name:"l"},{name:"x"},{name:"c"}]
},
render:function(createElement){
if(this.items.length){
return createElement("ul",this.items.map(function(ele){
return createElement("li",ele.name)
}))
}else{
return createElment("p","No items")
}
}
vue的h函数_vue 中的h函数相关推荐
- mounted钩子函数_vue中created钩子函数与mounted钩子函数的使用区别
1:在使用vue框架的过程中,我们经常需要给一些数据做一些初始化处理,这时候我们常用的就是在created与mounted选项中作出处理. 首先来看下官方解释,官方解释说created是在实例创建完成 ...
- scala 函数中嵌套函数_Scala中的嵌套函数 用法和示例
scala 函数中嵌套函数 Scala中的嵌套函数 (Nested functions in Scala) A nested function is defined as a function whi ...
- oracle中转换函数,Oracle中的转换函数
Oracle中的转换函数有三个,分别为to_char(),to_date(),to_number() 1.to_char()的用法 格式化当前的日期时间 select sysdate,to_char( ...
- c语言isnumber函数用法,【C、C++】ctype.h、cctype中的isnumber()函数和isdigit()函数的区别...
isnumber()函数和isdigit()函数并无区别,查看函数定义发现也是相同的,可能有微小的区别, Mac OS X 手册页 上ctype函数中对isnumber()和isdigit()函数的区 ...
- vue进入页面执行的钩子函数_vue中各选项及钩子函数执行顺序详解
{"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],&q ...
- vue created 调用方法_vue中的eventBus会产生内存泄漏吗
eventBus是在vue中经常用来解决跨组件消息传递的问题,但对它的使用要特别注意,否则会产生很严重的后果. 引入 本文介绍了eventBus的实现原理,并介绍它如何在vue中使用,并举了一个具体的 ...
- vue 数组对象提取_vue中使用对象数组的最佳实践
前言: 在平常的开发中,经常会在vue中用到对象数组,如渲染一个小区的列表,数据结构可能如下所示: CommunityList: [ { _id: '', community_code: '', co ...
- java 调用htm中js函数_Lua中调用C函数(lua5.2.3)
Lua可以调用C函数的能力将极大的提高Lua的可扩展性和可用性.对于有些和操作系统相关的功能,或者是对效率要求较高的模块,我们完全可以通过C函数来实现,之后再通过Lua调用指定的C函数.对于那些可被L ...
- matlab randi 函数,MATLAB中的randi函数
randi Pseudorandom integers from a uniform discrete distribution.来自一个均匀离散分布的伪随机整数 R = randi(IMAX,N) ...
- oracle有无left函数,Sql 中的 left 函数、right 函数
DB2中left()函数和right()函数对应oracle中的substr()函数 DB2 LEFT.RIGHT函数 语法:LEFT(ARG,LENGTH).RIGHT(ARG,LENGTH) LE ...
最新文章
- python编程从入门到实践课后题答案-python编程:从入门到实践习题5-8~5-11
- Java之Number类
- ResNet最强改进版来了!ResNeSt:Split-Attention Networks
- java中三种常见内存溢出错误的处理方法
- eclipse在ubuntu13.04下崩溃crash
- 如何有效解决C与C++的相互调用问题
- 大一C语言大作业ip合法性,c语言实现判断ip地址是否合法
- 使用管理员账户远程连接WMQ7.5的“AMQ4036”错误
- ID3、C4.5、CART决策树算法解析(关键内容讲解)
- 《图解HTTP》读书笔记(二:各种协议与HTTP协议之间的关系)
- 阶段5 3.微服务项目【学成在线】_day05 消息中间件RabbitMQ_1.页面发布-需求分析...
- 金融行业灾备压力大?看中和农信如何从容应对
- C语言(面积计算器)不能输入负数[程序以要求]
- 疑难杂症篇(一)--安装Visio与已安装的office冲突的解决方案
- 值得尝试的 MQTT 客户端工具
- 错误号 MSSQL_REPL20011 错误号:15517
- win10计算机拨号连接,拨号连接设置(Win10怎么设置宽带自动连接 win10开机自动连接宽带设置方法详解)...
- 移动终端开发详解总结(二)(kotlin版)| CSDN创作打卡
- 《矛盾论》与《实践论》
- Bootstrap Table Fixed Columns
热门文章
- echart可视化图表多条折线显示数据混乱问题
- 2021年最后一天,学点Selenium玩点新鲜~新的一年,让分布式测试有更多玩法
- 基于arduino的oled显示屏的使用
- 中国移动mda移动桌面助手
- 开关Switch系列:Switch修改滑块(thumb)和滑道(track)的颜色(一)
- 共享IPFS生态红利丨IPFS合伙人招募大会哈尔滨站圆满落幕
- TSC打印机使用教程终极版(转)
- VDI(Virtual Desktop Infrastructure)云桌面使用笔记
- 【Oracle】并行等待之PX Deq: Table Q Normal
- python爬虫 scrapy 爬取腾讯招聘