这里写自定义目录标题

  • Vue render渲染函数
    • 基础
    • render渲染函数的作用
    • render函数讲解
    • render和template的区别
    • render举例

Vue render渲染函数

基础

Vue 推荐使用在绝大多数情况下使用 template 来创建你的 HTML,比如在某个index.vue组件里,用模版template创建html代码如下:

<h1><a name="hello-world" href="#hello-world">Hello world!</a>
</h1>

然而在一些场景中,你真的需要 JavaScript 的完全编程的能力,不需要html,这就可以考虑用 render 渲染函数,它比 template 更接近编译器。我们一起来学习一下。

render渲染函数的作用

来看一下官网的例子: vue官网
官网的这里示例中,使用组件,将相同的内容通过solt放进h1-h6的标签中,在使用传统方式时,代码不仅冗长,而且在每一个级别的标题中重复书写了 ,在要插入锚点元素时还要再次重复。而使用render函数后,代码就精简了很多:

Vue.component('anchored-heading', {render: function (createElement) {return createElement('h' + this.level,   // 标签名称this.$slots.default // 子节点数组)},props: {level: {type: Number,required: true}}
})

render函数的作用是,当场景中用 template 实现起来代码冗长繁琐而且有大量重复,这个时候使用就可以极大的简化代码。

render函数讲解

在使用render函数中,会使用到一个参数createElement,而这个createElement参数,本质上,也是一个函数,是vue中构建虚拟dom所使用的工具。通过传入createElement参数,创建虚拟节点,然后再将节点返回给render返回出去。总的来说,render函数的本质就是创建一个虚拟dom节点。在createelement方法,有三个参数:

return createEement(, {}, [])

1.第一个参数(必要参数):主要是用于提供dom中的html内容,类型可以是字符串、对象或函数。
2.第二个参数(对象类型,可选):用于设置这个dom中的一些样式、属性、传的组件的参数、绑定事件之类的。
3.第三个参数(类型是数组,数组元素类型是VNode,可选):主要用于设置分发的内容,如新增的其他组件。

// @returns {VNode}
createElement(// {String | Object | Function}// 一个 HTML 标签名、组件选项对象,或者// resolve 了上述任何一种的一个 async 函数。必填项。'div',// {Object}// 一个与模板中 attribute 对应的数据对象。可选。{// (详情见下一节)},// {String | Array}// 子级虚拟节点 (VNodes),由 `createElement()` 构建而成,// 也可以使用字符串来生成“文本虚拟节点”。可选。['先写一些文字',createElement('h1', '一则头条'),createElement(MyComponent, {props: {someProp: 'foobar'}})]
)

再比如说,我们需要通过render渲染一些elementUI的icon,那我们可以像下面这样写某个index.vue,这样就可以创建虚拟dom,比如创建一些icon <i class="el-icon-edit"> <i class="el-icon-share">:

<script>
export default {name: "MenuItem",functional: true,props: {icon: {type: String,default: "",},title: {type: String,default: "",},},render(createElement, context) {const { icon, title } = context.props;const vnodes = [];if (icon) {vnodes.push(// <svg-icon icon-class={icon} class="navIcon" />// `<i class="${icon}"></i>`createElement("i", {class: icon,}));}if (title) {vnodes.push(<span slot="title" class="navSpan">{title}</span>);}return vnodes;},
};
</script>
<style scoped>
svg {font-size: 16px;
}
</style>

render和template的区别

相同之处:
render 函数 跟 template 一样都是创建 html 模板。

不同之处:
Template适合逻辑简单,render适合复杂逻辑。使用者template理解起来相对容易,但灵活性不足;自定义render函数灵活性高,但对使用者要求较高。render的性能较高,template性能较低。使用render函数渲染没有编译过程,相当于使用者直接将代码给程序。所以,使用它对使用者要求高,且易出现错误
Render 函数的优先级要比template的级别要高,但是要注意的是Mustache(双花括号)语法就不能再次使用。
注意:template和render不能一起使用,否则无效

render举例

如一次封装一套通用按钮组件,按钮有四个样式(success、error、warning、default)。template方式是如下:

 <div class="btn btn-success" v-if="type === 'success'">{{ text }}</div><div class="btn btn-danger" v-else-if="type === 'danger'">{{ text }}</div><div class="btn btn-warning" v-else-if="type === 'warning'">{{ text }}</div>

这样写在按钮少的时候没有问题,但是一旦按钮数量变多,这样写就会显得特别冗长,在这个时候,就需要render函数。在使用render函数前,需要先把template标签去掉,只保留逻辑层。通过传入的type动态填入class,通过inderText将内容添加入DOM中。

render(h) {return h('div', {class: {btn: true,'btn-success': this.type === 'success','btn-danger': this.type === 'danger','btn-warning': this.type === 'warning'},domProps: {innerText: this.text},on: {click: this.handleClick}});},

Vue render渲染函数相关推荐

  1. vue render 渲染函数 属性写法

    // 数组映射 结构render: (h) => {let renderHtml = [];for (let attr in markLineName) {let itemData = mark ...

  2. vue 渲染函数处理slot_vue render 渲染函数

    vue render 渲染函数 经常看到使用render渲染函数的示例,而且在一些特殊情况下,确实更好使用,可以更加有效地细分组件,因而借助vue-element-admin来学习一波 render函 ...

  3. Vue.js 2.x render 渲染函数 JSX

    Vue.js 2.x render 渲染函数 & JSX Vue绝大多数情况下使用template创建 HTML.但是比如一些重复性比较高的场景,需要运用 JavaScript 的完全编程能力 ...

  4. Vue中 渲染函数(render)的介绍和应用

    1. render函数的介绍 简单的说,在vue中我们使用模板HTML语法组建页面的,使用render函数我们可以用js语言来构建DOM. 因为vue是虚拟DOM,所以在拿到template模板时也要 ...

  5. vue的渲染函数 - render

    vue的渲染函数 - render 一.render函数是什么? 二.render函数的参数 1. createElement 第一个参数是必填的,可以是String | Object | Funct ...

  6. iview table 自定义列_基于VueJS的render渲染函数打造一款非常强大的IView 的Table组件...

    1.render渲染函数的介绍 字符串模板的代替方案,允许你发挥 JavaScript 最大的编程能力.该渲染函数接收一个 createElement 方法作为第一个参数用来创建 VNode. 如果组 ...

  7. 【前端基础知识】最基础的render渲染函数知识,一看就会

    Vue-Render渲染函数 是什么? 如何使用? 1. createElement的第一个参数 1.1 HTML 标签名(可以动态创建标签) 1.2 组件 2. createElement的第二个参 ...

  8. Vue的渲染函数renderh

    前言 vue中我们一般会用模板来创建HTML,但是在有些情况也会需要用到渲染函数. 渲染函数是用来生成Virtual DOM的.Vue推荐使用模板来构建我们的应用界面,在底层实现中Vue会将模板编译成 ...

  9. 【vue3】vue3在setup的render渲染函数中如何使用slots(插槽)?

    在setup中使用插槽,需要配合render渲染函数,先上代码. 子组件slotsTest.vue: <script lang="ts"> import { h,ren ...

最新文章

  1. 50万+Python 开发者的选择,这本书对零基础真是太太太友好了
  2. 介绍一个.Net资源站点
  3. python网络编程基础(线程与进程、并行与并发、同步与异步、阻塞与非阻塞、CPU密集型与IO密集型)...
  4. post提交调用的却是doget方法_Python基础教程 | Requests库的使用方法和细节
  5. Android 启动分析 1
  6. OPMS项目管理系--新增加项目报表统计
  7. VueCli3 项目结构和具体作用
  8. [入门]Ruby on Rails入门教程及开发工具选用
  9. SBI旗下交易所SBI VC Trade推出比特币借贷服务
  10. Fiddler中文乱码解决方法
  11. Go 开发关键技术指南 | 带着服务器编程金刚经走进 2020 年(内含超全知识大图)...
  12. html坦克游戏,HTML5+JS实现坦克大战小游戏
  13. 【英语:基础进阶_原著扩展阅读】J1.英文原著的选择和有效阅读方法
  14. 经典论文复现|手把手带你复现ICCV 2017经典论文—PyraNet
  15. [转]在数学的海洋中飘荡
  16. Excel中使用名称定义常数
  17. arcgis操作:dwg数据转为shp数据
  18. play 项目 入到Idea
  19. 深度学习: 细粒度图像分类 (fine-grained image recognition)
  20. vue打包后如何区分开发、测试和生产等不同的开发环境

热门文章

  1. 递归算法-数字三角形
  2. MOS管(场效应管)
  3. 逆向趣事:那些封印在代码中的骚操作
  4. Python + Tkinter 图形化界面设计1 —— 第一个图形化界面
  5. 软件开发、设计、不做一锤子买卖,欢迎长期合作
  6. 用flask做microblog遇到的一些问题
  7. 使用paddlespeech实现语音克隆合成
  8. 任正非:华为会怎么垮掉?
  9. 马云以2750亿财富第三次成为中国首富;扎克伯格:AWS云服务成本太高;小米否认冰箱由海尔代工 | EA周报...
  10. 大家来找茬图片比较脚本