Vue Render函数原理及代码实例解析


Posted in Javascript onJuly 30, 2020

简单的说,在vue中我们使用模板HTML语法组建页面的,使用render函数我们可以用js语言来构建DOM

因为vue是虚拟DOM,所以在拿到template模板时也要转译成VNode的函数,而用render函数构建DOM,vue就免去了转译的过程。

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

虽然在render里使用createElement函数创建DOM节点不是很直观,但是在部分独立组件的设计中还是可以满足一些特殊需求的。一个简单的render示例如下:

<!DOCTYPE html>
<html lang="zh-CN">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>Document</title>
</head>
<body>
  <div id="app">
    <my-component :list="list"></my-component>
  </div>
  <script src="vue.js"></script>
  <script>
    Vue.component('my-component', {
      props: {
        list: {
          type: Array,
          default: () => []
        }
      },
      render(createElement) {
        if (this.list.length) {
          return createElement('ul', this.list.map(item => createElement('li', item)))
        } else {
          return createElement('p', 'Empty list')
        }
      }
    })
    new Vue({
      el: '#app',
      data: {
        list: ['html', 'css', 'javascript']
      }
    })
  </script>
</body>
</html>

另外,由于v-if,v-else,v-show等指令都无法在render里使用,需要自己手动实现,拿常用的v-model举个栗子:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Vue.component('my-component', {
  data() {
    return {
      message: ''
    }
  },
  render(createElement) {
    return createElement(
      'div',
      [
        createElement(
          'input',
          {
            on: {
              input: e => this.message = e.target.value
            }
          }
        ),
        createElement('p', this.message)
      ]
    )
  }
})
Javascript 相关文章推荐
jBox 2.3基于jquery的最新多功能对话框插件 常见使用问题解答
Nov 10 Javascript
jquery validate poshytip 自定义样式
Nov 26 Javascript
PHP中使用微秒计算脚本执行时间例子
Nov 19 Javascript
JavaScript中的闭包介绍
Mar 15 Javascript
jQuery实现点击按钮弹出可关闭层的浮动层插件
Sep 19 Javascript
JS和jQuery使用submit方法无法提交表单的原因分析及解决办法
May 17 Javascript
使用jquery获取url以及jquery获取url参数的实现方法
May 25 Javascript
Angular和百度地图的结合实例代码
Oct 19 Javascript
jQuery的ajax中使用FormData实现页面无刷新上传功能
Jan 16 Javascript
Webpack常见静态资源处理-模块加载器(Loaders)+ExtractTextPlugin插件
Jun 29 Javascript
js实现以最简单的方式将数组元素添加到对象中的方法
Dec 20 Javascript
element el-table表格的二次封装实现(附表格高度自适应)
Jan 19 Javascript
vue - props 声明数组和对象操作
Jul 30 #Javascript
vue项目,代码提交至码云,iconfont的用法说明
Jul 30 #Javascript
vue如何使用外部特殊字体的操作
Jul 30 #Javascript
在vue-cli3中使用axios获取本地json操作
Jul 30 #Javascript
JavaScript JSON使用原理及注意事项
Jul 30 #Javascript
解决vue cli4升级sass-loader(v8)后报错问题
Jul 30 #Javascript
基于JavaScript实现猜数字游戏代码实例
Jul 30 #Javascript
You might like
PHP新手上路(十四)
2006/10/09 PHP
php短信接口代码
2016/05/13 PHP
PHP生成word文档的三种实现方式
2016/11/14 PHP
腾讯的ip接口 方便获取当前用户的ip地理位置
2010/11/25 Javascript
jQuery 对Select的操作备忘记录
2011/07/04 Javascript
js隐式全局变量造成的bug示例代码
2014/04/22 Javascript
浅析jQuery中调用ajax方法时在不同浏览器中遇到的问题
2014/06/11 Javascript
JQuery中使用on方法绑定hover事件实例
2014/12/09 Javascript
nodejs导出excel的方法
2015/06/30 NodeJs
javascript基础语法学习笔记
2016/01/04 Javascript
JS面向对象(3)之Object类,静态属性,闭包,私有属性, call和apply的使用,继承的三种实现方法
2016/02/25 Javascript
教你用javascript实现随机标签云效果_附代码
2016/03/16 Javascript
js实现交通灯效果
2017/01/13 Javascript
详解Angular 自定义结构指令
2017/06/21 Javascript
three.js中文文档学习之通过模块导入
2017/11/20 Javascript
详解如何实现一个简单的 vuex
2018/02/10 Javascript
vue做移动端适配最佳解决方案(亲测有效)
2018/09/04 Javascript
Vue-Cli项目优化操作的实现
2019/10/27 Javascript
swiper自定义分页器的样式
2020/09/14 Javascript
[04:27]2014DOTA2国际邀请赛 NAVI战队官方纪录片
2014/07/21 DOTA
Python守护进程用法实例分析
2015/06/04 Python
python中利用队列asyncio.Queue进行通讯详解
2017/09/10 Python
Python网络爬虫中的同步与异步示例详解
2018/02/03 Python
python取代netcat过程分析
2018/02/10 Python
用Python爬取QQ音乐评论并制成词云图的实例
2019/08/24 Python
在Django下创建项目以及设置settings.py教程
2019/12/03 Python
python3中布局背景颜色代码分析
2020/12/01 Python
通过HTML5规范搞定i、em、b、strong元素的区别
2017/03/04 HTML / CSS
专科毕业生求职简历的自我评价
2013/10/12 职场文书
手术室护士长竞聘书
2014/03/31 职场文书
计算机售后服务承诺书
2014/05/30 职场文书
火锅店的活动方案
2014/08/15 职场文书
乡镇四风对照检查材料
2014/08/31 职场文书
怎样写观后感
2015/06/19 职场文书
初中教务主任竞聘演讲稿(范文)
2019/08/20 职场文书
手把手教你制定暑期学习计划,让你度过充实的暑假
2019/08/22 职场文书