Vue - 渲染函数render

如题所述

第1个回答  2022-07-02

简单的说,在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语法简介