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 相关文章推荐
js动态添加onload、onresize、onscroll事件(另类方法)
Dec 26 Javascript
jQuery 2.0.3 源码分析之core(一)整体架构
May 27 Javascript
js实现双击图片放大单击缩小的方法
Feb 17 Javascript
js实现可得到不同颜色值的颜色选择器实例
Feb 28 Javascript
详解JavaScript的表达式与运算符
Nov 30 Javascript
jQuery+canvas实现的球体平抛及颜色动态变换效果
Jan 28 Javascript
jQuery插件JWPlayer视频播放器用法实例分析
Jan 11 Javascript
微信小程序中用WebStorm使用LESS
Mar 08 Javascript
Angularjs cookie 操作实例详解
Sep 27 Javascript
Vue实现导出excel表格功能
Mar 30 Javascript
Vue 中mixin 的用法详解
Apr 23 Javascript
详解 javascript对象创建模式
Oct 30 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
服务器web工具 php环境下
2010/12/29 PHP
jQuery 源码分析笔记
2011/05/25 PHP
PHP转换IP地址到真实地址的方法详解
2013/06/09 PHP
PHP header()函数常用方法总结
2014/04/11 PHP
php实现的用户查询类实例
2015/06/18 PHP
利用laravel+ajax实现文件上传功能方法示例
2017/08/13 PHP
使用XHProf查找PHP性能瓶颈的实例
2017/12/13 PHP
IE中radio 或checkbox的checked属性初始状态下不能选中显示问题
2009/07/25 Javascript
Mootools 1.2教程 Fx.Tween的使用
2009/09/15 Javascript
限制文本框输入N个字符的js代码
2010/05/13 Javascript
js在IE与firefox的差异集锦
2014/11/11 Javascript
jQuery实现网站添加高亮突出显示效果的方法
2015/06/26 Javascript
jQuery实现TAB选项卡切换特效简单演示
2016/03/04 Javascript
Javascript调试之console对象——你不知道的一些小技巧
2017/07/10 Javascript
基于jQuery实现手风琴菜单、层级菜单、置顶菜单、无缝滚动效果
2017/07/20 jQuery
详解webpack2+React 实例demo
2017/09/11 Javascript
Python中处理字符串之islower()方法的使用简介
2015/05/19 Python
在Apache服务器上同时运行多个Django程序的方法
2015/07/22 Python
Python基于有道实现英汉字典功能
2015/07/25 Python
django模板语法学习之include示例详解
2017/12/17 Python
python命令行解析之parse_known_args()函数和parse_args()使用区别介绍
2018/01/24 Python
DataFrame 将某列数据转为数组的方法
2018/04/13 Python
解决python有时候import不了当前的包问题
2019/08/28 Python
python爬虫scrapy框架之增量式爬虫的示例代码
2021/02/26 Python
匡威比利时官网:Converse Belgium
2017/04/13 全球购物
俄罗斯一家时尚女装商店:Charuel
2019/12/04 全球购物
JoJo Maman Bébé爱尔兰官网:英国最受欢迎的精品母婴品牌
2020/12/20 全球购物
天鹅的故事教学反思
2014/02/04 职场文书
公司授权委托书样本
2014/09/15 职场文书
2014年发展党员工作总结
2014/11/12 职场文书
社区服务理念口号
2015/12/25 职场文书
​(迎国庆)作文之我爱我的祖国
2019/09/19 职场文书
golang goroutine顺序输出方式
2021/04/29 Golang
浅谈react useEffect闭包的坑
2021/06/08 Javascript
Innodb存储引擎中的后台线程详解
2022/04/03 MySQL
Java中的继承、多态以及封装
2022/04/11 Java/Android