精华内容
下载资源
问答
  • 在讲h函数之前,我们先来了解下虚拟dom:虚拟dom简单来说就是一个普通JavaScript对象,包含tag,props,children三个属性。。。lxc上边HTML代码转为虚拟DOM如下:{tag:"div",props:{id:"app"},children:[{tag:"p...

    在讲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")

    }

    }

    展开全文
  • render函数在使用中经常遇到类似以下用法:component: { render: h => h("router-view") },语法解释如下:render: function (createElement) {return createElement(App);}ES6中:render (createElement) {return ...

    render函数在使用中经常遇到类似以下用法:

    component: { render: h => h("router-view") },

    语法解释如下:

    render: function (createElement) {

    return createElement(App);

    }

    ES6中:

    render (createElement) {

    return createElement(App);

    }

    此处,官网文档中有描述,内容如下:

    将 h 作为 createElement 的别名是 Vue 生态系统中的一个通用惯例,实际上也是 JSX 所要求的。从 Vue 的 Babel 插件的 3.4.0 版本开始,我们会在以 ES2015 语法声明的含有 JSX 的任何方法和 getter 中 (不是函数或箭头函数中) 自动注入 const h = this.$createElement,这样你就可以去掉 (h) 参数了。对于更早版本的插件,如果 h 在当前作用域中不可用,应用会抛错。

    写法变更为:

    render (h) {

    return h(App);

    }

    改写为箭头函数:

    render: h => h(App);

    以下引自官方文档

    函数式组件

    之前创建的锚点标题组件是比较简单,没有管理任何状态,也没有监听任何传递给它的状态,也没有生命周期方法。实际上,它只是一个接受一些 prop 的函数。

    在这样的场景下,我们可以将组件标记为 functional,这意味它无状态 (没有响应式数据),也没有实例 (没有 this 上下文)。

    一个函数式组件就像这样:

    Vue.component('my-component', {

    functional: true,

    // Props 是可选的

    props: {

    // ...

    },

    // 为了弥补缺少的实例

    // 提供第二个参数作为上下文

    render: function (createElement, context) {

    // ...

    }

    })

    在 2.5.0 及以上版本中,如果你使用了单文件组件,那么基于模板的函数式组件可以这样声明:

    组件需要的一切都是通过 context 参数传递,它是一个包括如下字段的对象:

    props:提供所有 prop 的对象

    children: VNode 子节点的数组

    slots: 一个函数,返回了包含所有插槽的对象

    scopedSlots: (2.6.0+) 一个暴露传入的作用域插槽的对象。也以函数形式暴露普通插槽。

    data:传递给组件的整个数据对象,作为 createElement 的第二个参数传入组件

    parent:对父组件的引用

    listeners: (2.3.0+) 一个包含了所有父组件为当前组件注册的事件监听器的对象。这是 data.on 的一个别名。

    injections: (2.3.0+) 如果使用了 inject 选项,则该对象包含了应当被注入的属性。

    在添加 functional: true 之后,需要更新我们的锚点标题组件的渲染函数,为其增加 context 参数,并将 this.$slots.default 更新为 context.children,然后将 this.level 更新为 context.props.level。

    因为函数式组件只是函数,所以渲染开销也低很多。

    在作为包装组件时它们也同样非常有用。比如,当你需要做这些时:

    程序化地在多个组件中选择一个来代为渲染;

    在将 children、props、data 传递给子组件之前操作它们。

    下面是一个 smart-list 组件的例子,它能根据传入 prop 的值来代为渲染更具体的组件:

    var EmptyList = { /* ... */ }

    var TableList = { /* ... */ }

    var OrderedList = { /* ... */ }

    var UnorderedList = { /* ... */ }

    Vue.component('smart-list', {

    functional: true,

    props: {

    items: {

    type: Array,

    required: true

    },

    isOrdered: Boolean

    },

    render: function (createElement, context) {

    function appropriateListComponent () {

    var items = context.props.items

    if (items.length === 0) return EmptyList

    if (typeof items[0] === 'object') return TableList

    if (context.props.isOrdered) return OrderedList

    return UnorderedList

    }

    return createElement(

    appropriateListComponent(),

    context.data,

    context.children

    )

    }

    })

    展开全文
  • 浅谈Vue中render中的h箭头函数发布时间:2020-08-30 10:03:39来源:脚本之家阅读:91vue2.0新增了render方法,官方案例写的是:render: h=>h(app)其中h是由createElement方法演变而来render: function...

    浅谈Vue中render中的h箭头函数

    发布时间:2020-08-30 10:03:39

    来源:脚本之家

    阅读:91

    vue2.0新增了render方法,官方案例写的是:

    render: h=>h(app)

    其中h是由createElement方法演变而来

    render: function(createElement){

    return createElement(app)

    }

    用es6的写法就是:(只有一个个return语句,可以省略return和{})

    render: createElement=>createElement(app)

    将createElement改成 h 就是官方写法。

    使用 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,所以用 h 替代了 createElement 。

    以上这篇浅谈Vue中render中的h箭头函数就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持亿速云。

    展开全文
  • vue2.0览或讲琐了过自系一读页围这就多网解元当维新增了render方法,官方案例写直分调浏器代,刚求一学础过功互有解小久宗点差维含数是:render: h=>h(app)其中览页些求时是过解些这确如目前例总站回广随h是...

    vue2.0览或讲琐了过自系一读页围这就多网解元当维新增了render方法,官方案例写的直分调浏器代,刚求的一学础过功互有解小久宗点差维含数是:

    render: h=>h(app)

    其中览页些求时是过解些这确如目前例总站回广随h是由createElement是能览调不页新代些事几求事都时学下是事功过发,解方法演变而来

    render: function(createElement){

    return createElement(app)

    }

    用es6二,都过发宗发数前业很断屏击和公图使分近的写法就是:(只有一个个return语句,可以省略return和能调页代事求都学是功发解开宗这维视如间请前框来总在行回断元随来以4移和泉果动标{})

    render: createElement=>createElement(app)

    将createElement改成 h 就是官方写法。

    使用 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 的缩写(超文本标记语言)

    cre的整序大作站对近从体的家为宽应近从体的家ateElement 用来生成 HTML DOM 元素,也就是上文中的 generate HTML structures,也就是 Hyperscript,所以用 h 替代了 createElem者天后小剑含个结在页别气。效按高近浏天来痛不的项构浏面了风整果钮度近浏天来痛不的项构浏面了风整果钮度近浏天来痛不的项构浏面了风整果钮度近浏天来痛不的项构浏面了风整果钮度近浏天来痛不的项构浏面了风整果钮度近浏天来ent 。

    本文来源于网络:查看 >https://blog.csdn.net/runOnWay/article/details/79096397

    展开全文
  • 浅谈Vue.js中render中的h箭头函数发布于 2020-3-7|复制链接分享一篇关于浅谈Vue中render中的h箭头函数,具有很好的参考价值,希望对大家有所帮助。一起跟随小妖过来看看吧vue2.0新增了render方法,官方案例写的是:`...
  • 在学习Vue.js时,使用vue-cli创建了一个Vue项目,main.js文件中有一行经典代码 render: h => h(App),那她是什么意思呢?main.js 文件内容import Vue from 'vue'import App from './App.vue'new Vue({el: '#app',...
  • vue 一段时间了,那么你可能会遇到过rendering方法在你 app 文件中 -- 在最新版本CLI中它是一个默认值, 并且是在main.js文件中:new Vue({render: h => h(App)}).$mount...
  • >[success] # h函数~~~1.将函数表达式形式渲染成 虚拟dom,我们这里处理不像'snabbdom',对...我们这里直接判断如果是对象就默认是h函数返回虚拟dom,如果不是默认是文本,并且将文本转换成h函数形式2.虽然没...
  • h(App)是ES6写法,其实就是如下内容简写:render: function (createElement) {return createElement(App);}然后ES6写法,render: createElement => createElement(App)然后用h代替createElement,使用箭头...
  • 基础Vue 推荐使用在绝大多数情况下使用 template 来创建你 HTML。然而在一些场景中,你真需要 JavaScript 完全编程能力,这就是 render 函数,它比 template 更接近编译器。让我们先深入一个使用 render ...
  • 刚开始学Vue,再看别人例子时经常会看到render: h => h(App)这样一行代码,但是有例子也没有这行代码也运行正常。去官方看文档 找到render function 没有太理解,求大神讲解这行代码作用和为什么要这样做。...
  • h(App) 是下面内容缩写:render: function (createElement) {return createElement(App);}进一步缩写为(ES6 语法):render (createElement) {return createElement(App);}再进一步缩写为:render (h){return h...
  • vueh函数中添加ref无效原因

    千次阅读 2018-09-12 11:46:44
    const deleteButton = (vm, h, currentRow, index) => { return h('Poptip', { ref: 'poptip', props: { placement: 'left', title: '您确定要...
  • vue的h函数

    万次阅读 2019-07-15 17:29:11
    在讲h函数之前,我们先来了解下虚拟dom: 虚拟dom简单来说就是一个普通JavaScript对象,包含tag,props,children三个属性。。。 <div id="app"> <p className="text">lxc</p> </div>...
  • vue的render函数

    2020-05-19 09:00:21
    vue的render函数render函数的基本定义render的基本组成render的this.$routrender: h => h(App) render函数的基本定义 vue使用html构建页面的,render方便用js来渲染。 render的基本组成 一、首先render里有...
  • vue的渲染函数和jsx

    2020-07-01 11:57:14
    vue在正常情况下使用模板创建HTML,但是在一些情况下,需要js完全变成能力,可以使用渲染函数,比模板更加贴近编辑器 我们可以使用render渲染函数,实现一个简单例子,例如生成带锚点标题, Vue.component('...
  • vue的render函数用法

    2019-10-19 10:39:33
    前面我们组件模板都是在模板里写(template),模板最后都会被vue编译成virtual dom(虚拟dom),在某些情况下模板可能不好用,例如需要实现一个动态文章标题,根据父组件level属性,动态渲染成h1~hx标签,...
  • Vue 的 render 函数的h方法用于创建虚拟DOM。 其中设置DOM属性的选项有两种: attrs 用于设置HTML定义的 attribute domProps 用于设置DOM定义的property 官方文档 attribute 和 property的关系 少量 ...
  • vue:render函数的实际应用 1.模板 render: (h, params) => { return h("span",{},[]) //第一个参数是要渲染元素;第二个可以写元素样式,绑定事件,属性;第三个是元素内容(可以对元素数据进行处理)...
  • Vue中render函数和template区别 vue中一般 使用template来创建HTML,有时也会使用JavaScript来创建爱你HTML,这时就需要render函数 render函数中有一个参数叫h也就是creatElement,render函数将createElement...
  • 今天小编就为大家分享一篇浅谈Vue中render中的h箭头函数,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • Vue - 渲染函数render

    2020-07-16 10:43:58
    因为vue是虚拟DOM,所以在拿到template模板时也要转译成VNode的函数,而用render函数构建DOM,vue就免去了转译过程。 当使用render函数描述虚拟DOM时,vue提供一个函数,这个函数是就构建虚拟DOM所需要工具。...
  • 使用方法: ...其实h()函数和createVNode()函数都是创建dom节点,他们作用是一样,直接上代码: import { createApp } from "vue"; //import App from "./App.vue"; import { defineComponent, h
  •  因为vue是虚拟DOM,所以在拿到template模板时也要转译成VNode的函数,而用render函数构建DOM,vue就免去了转译过程。  当使用render函数描述虚拟DOM时,vue提供一个函数,这个函数是就构建虚拟DOM所需要工具...
  • vue中render函数解析

    2020-04-05 14:29:51
    在vue文件中其实是通过读取template再渲染到render函数中,在vue的main.js中初始状态是这样的: new Vue({ render:h=>(App) }).$mount('#app') 以上代码可以解析成 new Vue({ render:React.createElement=...

空空如也

空空如也

1 2 3 4 5 ... 17
收藏数 327
精华内容 130
关键字:

vue的h函数

vue 订阅