Vue render渲染函数
这里写自定义目录标题
- 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渲染函数相关推荐
- vue render 渲染函数 属性写法
// 数组映射 结构render: (h) => {let renderHtml = [];for (let attr in markLineName) {let itemData = mark ...
- vue 渲染函数处理slot_vue render 渲染函数
vue render 渲染函数 经常看到使用render渲染函数的示例,而且在一些特殊情况下,确实更好使用,可以更加有效地细分组件,因而借助vue-element-admin来学习一波 render函 ...
- Vue.js 2.x render 渲染函数 JSX
Vue.js 2.x render 渲染函数 & JSX Vue绝大多数情况下使用template创建 HTML.但是比如一些重复性比较高的场景,需要运用 JavaScript 的完全编程能力 ...
- Vue中 渲染函数(render)的介绍和应用
1. render函数的介绍 简单的说,在vue中我们使用模板HTML语法组建页面的,使用render函数我们可以用js语言来构建DOM. 因为vue是虚拟DOM,所以在拿到template模板时也要 ...
- vue的渲染函数 - render
vue的渲染函数 - render 一.render函数是什么? 二.render函数的参数 1. createElement 第一个参数是必填的,可以是String | Object | Funct ...
- iview table 自定义列_基于VueJS的render渲染函数打造一款非常强大的IView 的Table组件...
1.render渲染函数的介绍 字符串模板的代替方案,允许你发挥 JavaScript 最大的编程能力.该渲染函数接收一个 createElement 方法作为第一个参数用来创建 VNode. 如果组 ...
- 【前端基础知识】最基础的render渲染函数知识,一看就会
Vue-Render渲染函数 是什么? 如何使用? 1. createElement的第一个参数 1.1 HTML 标签名(可以动态创建标签) 1.2 组件 2. createElement的第二个参 ...
- Vue的渲染函数renderh
前言 vue中我们一般会用模板来创建HTML,但是在有些情况也会需要用到渲染函数. 渲染函数是用来生成Virtual DOM的.Vue推荐使用模板来构建我们的应用界面,在底层实现中Vue会将模板编译成 ...
- 【vue3】vue3在setup的render渲染函数中如何使用slots(插槽)?
在setup中使用插槽,需要配合render渲染函数,先上代码. 子组件slotsTest.vue: <script lang="ts"> import { h,ren ...
最新文章
- 50万+Python 开发者的选择,这本书对零基础真是太太太友好了
- 介绍一个.Net资源站点
- python网络编程基础(线程与进程、并行与并发、同步与异步、阻塞与非阻塞、CPU密集型与IO密集型)...
- post提交调用的却是doget方法_Python基础教程 | Requests库的使用方法和细节
- Android 启动分析 1
- OPMS项目管理系--新增加项目报表统计
- VueCli3 项目结构和具体作用
- [入门]Ruby on Rails入门教程及开发工具选用
- SBI旗下交易所SBI VC Trade推出比特币借贷服务
- Fiddler中文乱码解决方法
- Go 开发关键技术指南 | 带着服务器编程金刚经走进 2020 年(内含超全知识大图)...
- html坦克游戏,HTML5+JS实现坦克大战小游戏
- 【英语:基础进阶_原著扩展阅读】J1.英文原著的选择和有效阅读方法
- 经典论文复现|手把手带你复现ICCV 2017经典论文—PyraNet
- [转]在数学的海洋中飘荡
- Excel中使用名称定义常数
- arcgis操作:dwg数据转为shp数据
- play 项目 入到Idea
- 深度学习: 细粒度图像分类 (fine-grained image recognition)
- vue打包后如何区分开发、测试和生产等不同的开发环境