Vue - 渲染函数render

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Vue - 渲染函数render相关的知识,希望对你有一定的参考价值。

参考技术A

简单的说,在vue中我们使用模板html语法来组建页面的,使用render函数我们可以用js语言来构建DOM。因为vue是虚拟DOM,所以在拿到template模板时也要转译成VNode的函数,而用render函数构建DOM,vue就免去了转译的过程。

当使用render函数描述虚拟DOM时,vue提供一个函数,这个函数是就构建虚拟DOM所需要的工具。官网上给他起了个名字叫createElement。还有约定它的简写叫h

示例: 分别使用html语法和render函数来实现根据传入的 level (h1-h6)页面渲染不同的标题格式

【1】使用组件的形式

【2】使用render函数的形式(修改child1子组件)

render 函数即渲染函数,它是个函数,render 函数的返回值是VNode(即:虚拟节点,也就是我们要渲染的节点)
createElement 是 render 函数的参数,它本身也是个函数,并且有三个参数。接来下我们重点介绍这三个参数

【1】createElement 第一个参数是必填的,可以是String | Object | Function

示例:

【2】createElement 第二个参数是选填的,一个与模板中属性对应的数据对象 ****常用的有class | style | attrs | domProps | on

【3】createElement 第三个参数是选填的,代表子级虚拟节点 (VNodes),由 createElement() 构建而成,正常来讲接收的是一个字符串或者一个数组,一般数组用的是比较多的

在render函数中,没有提供v-model的实现,所以你必须自己实现相应的逻辑。这就是深入底层的代价,但与v-model相比,这可以让你更好地控制交互细节。

结果如下:

对于.passive,.capture, .once 这些事件修饰符, Vue 提供了相应的前缀可以用于 on

JSX就是javascript和XML结合的一种格式。React发明了JSX,利用HTML语法来创建虚拟DOM。当遇到<,JSX就当HTML解析,遇到就当JavaScript解析。

复杂的render函数书写异常痛苦,这就是为什么会有一个Babel插件,用于在 Vue 中使用 JSX 语法,它可以让我们回到更接近于模板的语法上。

JSX语法学习文档: vuejs/JSX JSX语法简介

vue渲染虚拟dom树原理

参考技术A 1、判断是否有render函数,如果有,直接将render函数返回结果作为虚拟节点树;如果没有,看有没有template配置

2、如果有template配置,将template作为模板 编译为render函数;如果没有则看el配置的outerHTML作为模板

render函数:

a、render 函数的参数(createElement)

createElement 是 render 函数 的参数,它本身也是个函数,并且有三个参数。

b、createElement 函数的参数(三个)

(1)一个 HTML 标签字符串,组件选项对象,或者解析上述任何一种的一个 async 异步函数。类型:String | Object | Function。必需。

(2)一个包含模板相关属性的数据对象你可以在 template 中使用这些特性。类型:Object。可选。

(3)子虚拟节点 (VNodes),由 createElement() 构建而成,也可以使用字符串来生成“文本虚拟节点”。类型:String | Array。可选。

例子:

var vm= new Vue(

el:"#app",

data:

author:“web小王子”



render(h)

h("h1",[h("h1",



      props:

        someProp: 'foobar'     

    ,

`第1个vue应用,作者$this.author`)])



)

以上是关于Vue - 渲染函数render的主要内容,如果未能解决你的问题,请参考以下文章

使用render函数渲染组件

vue渲染虚拟dom树原理

vue中渲染函数Render原理解析

理解Vue中的Render渲染函数

vue页面的渲染过程

vue入门:(底层渲染实现render函数实例生命周期)