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 相关文章推荐
javascript 打开页面window.location和window.open的区别
Mar 17 Javascript
JQuery each()函数如何优化循环DOM结构的性能
Dec 10 Javascript
JavaScript获取鼠标移动时的坐标(兼容IE8、chome谷歌、Firefox)
Sep 13 Javascript
JavaScript实现同时调用多个函数的方法
Nov 09 Javascript
一个可复用的vue分页组件
May 15 Javascript
javascript计算渐变颜色的实例
Sep 22 Javascript
vue中本地静态图片路径写法
Mar 06 Javascript
一步一步的了解webpack4的splitChunk插件(小结)
Sep 17 Javascript
vue父子组件通信的高级用法示例
Aug 29 Javascript
微信公众号网页分享功能开发的示例代码
May 27 Javascript
仿照Element-ui实现一个简易的$message方法
Sep 14 Javascript
vue大型项目之分模块运行/打包的实现
Sep 21 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
如何冲泡挂耳包咖啡?技巧是什么
2021/03/04 冲泡冲煮
php导出CSV抽象类实例
2014/09/24 PHP
PHP内核探索之变量
2015/12/22 PHP
laravel 实现向公共模板中传值 (view composer)
2019/10/22 PHP
JavaScript判断变量是否为undefined的两种写法区别
2013/12/04 Javascript
js jquery ajax的几种用法总结(及优缺点介绍)
2014/01/28 Javascript
JavaScript实现的一个倒计时的类
2015/03/12 Javascript
Js与Jq 获取页面元素值的方法和差异对比
2015/04/30 Javascript
angularjs表格分页功能详解
2016/01/21 Javascript
vue2.0父子组件及非父子组件之间的通信方法
2017/01/21 Javascript
在ABP框架中使用BootstrapTable组件的方法
2017/07/31 Javascript
vue.js实例对象+组件树的详细介绍
2017/10/20 Javascript
Node.js使用MySQL连接池的方法实例
2018/02/11 Javascript
webpack源码之loader机制详解
2018/04/06 Javascript
微信小程序显示倒计时功能示例【测试可用】
2018/12/03 Javascript
jquery使用echarts实现有向图可视化功能示例
2019/11/25 jQuery
html-webpack-plugin修改页面的title的方法
2020/06/18 Javascript
js实现星星海特效的示例
2020/09/28 Javascript
[00:59]DOTA2英雄背景故事——上古巨神
2020/06/28 DOTA
开始着手第一个Django项目
2015/07/15 Python
Python字符串切片操作知识详解
2016/03/28 Python
详解Python3中字符串中的数字提取方法
2017/01/14 Python
20行python代码的入门级小游戏的详解
2019/05/05 Python
python实现的读取网页并分词功能示例
2019/10/29 Python
使用python 将图片复制到系统剪贴中
2019/12/13 Python
Python 解析简单的XML数据
2020/07/24 Python
Python通过字典映射函数实现switch
2020/11/06 Python
python在地图上画比例的实例详解
2020/11/13 Python
加拿大最大的五金、家居装修和园艺产品商店:RONA
2017/01/27 全球购物
美国波西米亚风格精品店:South Moon Under
2019/10/26 全球购物
意大利单身交友网站:Meetic
2020/07/12 全球购物
点菜员岗位职责范本
2014/02/14 职场文书
会计工作总结范文2014
2014/12/23 职场文书
幼儿园新学期开学寄语
2015/05/27 职场文书
小学见习报告
2015/06/23 职场文书
中学生运动会广播稿
2015/08/19 职场文书