刚开始学Vue,再看别人的例子时经常会看到
render: h => h(App)
这样一行代码,但是有的例子也没有这行代码也运行正常。去官方看文档 找到render function 没有太理解,求大神讲解这行代码的作用和为什么要这样做。谢谢!
刚开始学Vue,再看别人的例子时经常会看到
render: h => h(App)
这样一行代码,但是有的例子也没有这行代码也运行正常。去官方看文档 找到render function 没有太理解,求大神讲解这行代码的作用和为什么要这样做。谢谢!
为了方便仍然有疑惑的人,贴一个链接, 其中 @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 }
});
然后在页面中写入标记:
<div id="app">
<app></app>
</div>
// 写法1:
import App from './App'
new Vue({
el: '#root',
render: h => h(App)
})
// 写法2:
import App from './App'
new Vue({
el: '#root',
template: '<App></App>',
components: {
App
}
})
上面两种的效果是一样的,可以看出 h(App)函数 的作用是:使用App作为这个Vue实例的template(同时一并了注册App组件)
以上个人见解,有错误望指正
理解要点是 当只有一个参数的时候()可以省略;当函数体只有一句话{}可以省略,所以 render: (h) => {h(App)};
就变成 render: h => h(App);
vue.js 有一行代码
var h = function (a, b, c, d) { return createElement(_context, a, b, c, d, true); };
6 回答2.9k 阅读✓ 已解决
6 回答2.3k 阅读
5 回答6.3k 阅读✓ 已解决
2 回答2k 阅读✓ 已解决
2 回答1.5k 阅读✓ 已解决
4 回答2.6k 阅读
2 回答974 阅读✓ 已解决
=> 是ES6的箭头语法
[官方文档][1]
: