vue的h函数_【Vue】关于Vue中的 render: h => h(App) 具体是什么含义?

本文详细解释了Vue中`render: h => h(App)`的含义和作用,指出它是`createElement`函数的简写,用于生成HTML结构。文中还介绍了Vue 2.0中直接渲染组件的方式,并探讨了h作为别名的来源和在虚拟DOM中的作用。
摘要由CSDN通过智能技术生成

刚开始学Vue,再看别人的例子时经常会看到

render: h => h(App)

这样一行代码,但是有的例子也没有这行代码也运行正常。去官方看文档 找到render function 没有太理解,求大神讲解这行代码的作用和为什么要这样做。谢谢!

回答

=> 是ES6的箭头语法

// ES5

(function (h) {

return h(App);

});

// ES6

h => h(App);

[官方文档][1]:

render: function (createElement) {

return createElement(

'h' + this.level, // tag name 标签名称

this.$slots.default // 子组件中的阵列

)

}

为了方便仍然有疑惑的人,贴一个链接, 其中 @bjunc 的解答可以作为该题的完美回答;

大概的翻译下:

render: h => h(App) 是下面内容的缩写:

render: function (createElement) {

return createElement(App);

}

进一步缩写为(ES6 语法):

render (createElement) {

return createElement(App);

}

再进一步缩写为:

render (h){

return h(App);

}

按照 ES6 箭头函数的写法,就得到了:

render: h => h(App);

其中 根据 Vue.js 作者 Even You 的回复,h 的含义如下:

It comes from the term “hyperscript”, which is commonly used in many virtual-dom implementations. “Hyperscript” itself stands for “script that generates HTML structures” because HTML is the acronym for “hyper-text markup language”.

它来自单词 hyperscript,这个单词通常用在 virtual-dom 的实现中。Hyperscript 本身是指

生成HTML 结构的 script 脚本,因为 HTML 是 hyper-text markup language 的缩写(超文本标记语言)

个人理解:createElement 函数是用来生成 HTML DOM 元素的,也就是上文中的 generate HTML structures,也就是 Hyperscript,这样作者才把 createElement 简写成 h。

这是Vue 2.0新增的函数,可以直接给绑定节点渲染一个vue组件,如果在Vue 1.x下,就应该使用

new Vue({

el: '#app',

components: { App }

});

然后在页面中写入标记:

// 写法1:

import App from './App'

new Vue({

el: '#root',

render: h => h(App)

})

// 写法2:

import App from './App'

new Vue({

el: '#root',

template: '',

components: {

App

}

})

上面两种的效果是一样的,可以看出 h(App)函数 的作用是:使用App作为这个Vue实例的template(同时一并了注册App组件)

以上个人见解,有错误望指正

理解要点是 当只有一个参数的时候()可以省略;当函数体只有一句话{}可以省略,所以 render: (h) => {h(App)};就变成 render: h => h(App);

将h作为createElement的别名是一个通用惯例

vue.js 有一行代码

var h = function (a, b, c, d) { return createElement(_context, a, b, c, d, true); };

将 h 作为 createElement 的别名是 Vue 生态系统中的一个通用惯例,实际上也是 JSX 所要求的,如果在作用域中 h 失去作用, 在应用中会触发报错。

render: h => h(App)

你可以将上述代码看做为

render: function (createElement){

return createElement(app);

}

可见,在vuejs中,h函数仅是作为createElement函数之缩写

“Hyperscript” itself stands for “script that generates HTML structures” because HTML is the acronym for “hyper-text markup language”.

它来自单词 hyperscript,这个单词通常用在 virtual-dom 的实现中。Hyperscript 本身是指

生成HTML 结构的 script 脚本,因为 HTML 是 hyper-text markup language 的缩写(超文本标记语言)

个人理解:createElement 函数是用来生成 HTML DOM 元素的,也就是上文中的 generate HTML structures,也就是 Hyperscript,这样作者才把 createElement 简写成 h。

正好周三在 SF 有一堂关于 Vue Render 函数的直播讲座,建议到时听听:

https://segmentfault.com/l/15…

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值