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入门·图片对象(无刷新变换图片)\滚动图像
Oct 01 Javascript
把input初始值不写value的具体实现方法
Jul 04 Javascript
js计算两个时间之间天数差的实例代码
Nov 19 Javascript
JavaScript基础语法、dom操作树及document对象
Dec 02 Javascript
Bootstrap入门书籍之(三)栅格系统
Feb 17 Javascript
分享js粘帖屏幕截图到web页面插件screenshot-paste
Aug 21 Javascript
js中判断变量类型函数typeof的用法总结
Aug 09 Javascript
Vue中自定义全局组件的实现方法
Dec 08 Javascript
vue-cli开发时,关于ajax跨域的解决方法(推荐)
Feb 03 Javascript
vue 使用高德地图vue-amap组件过程解析
Sep 07 Javascript
JS数据类型STRING使用实例解析
Dec 18 Javascript
js Proxy的原理详解
May 25 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&amp;&amp;mysql)六
2006/10/09 PHP
解析php时间戳与日期的转换
2013/06/06 PHP
PHP自带ZIP压缩、解压缩类ZipArchiv使用指南
2015/03/03 PHP
Yii中创建自己的Widget实例
2016/01/05 PHP
PHP使用微信开发模式实现搜索已发送图文及匹配关键字回复的方法
2017/09/13 PHP
点击文章内容处弹出页面代码
2009/10/01 Javascript
javascript 三种编解码方式
2010/02/01 Javascript
jquery 实现上下滚动效果示例代码
2013/08/09 Javascript
Jquery实现Div上下移动示例
2014/04/23 Javascript
jQuery简单实现日历的方法
2015/05/04 Javascript
JavaScript动态创建form表单并提交的实现方法
2015/12/10 Javascript
Javascript获取随机数的实现方法
2016/06/22 Javascript
AngularJs定制样式插入到ueditor中的问题小结
2016/08/01 Javascript
ES6教程之for循环和Map,Set用法分析
2017/04/10 Javascript
jQuery+ajax实现局部刷新的两种方法
2017/06/08 jQuery
浅析node.js的模块加载机制
2018/05/25 Javascript
vue 刷新之后 嵌套路由不变 重新渲染页面的方法
2018/09/13 Javascript
jQuery实现左右两个列表框的内容相互移动功能示例
2019/01/27 jQuery
JS/jQuery实现超简单的Table表格添加,删除行功能示例
2019/07/31 jQuery
使用ThinkJs搭建微信中控服务的实现方法
2019/08/08 Javascript
layui监听工具栏的实例(操作列表按钮)
2019/09/10 Javascript
vue radio单选框,获取当前项(每一项)的value值操作
2020/09/10 Javascript
rhythmbox中文名乱码问题解决方法
2008/09/06 Python
使用Python内置的模块与函数进行不同进制的数的转换
2016/03/12 Python
Python控制多进程与多线程并发数总结
2016/10/26 Python
Python实现登录接口的示例代码
2017/07/21 Python
python安装本地whl的实例步骤
2019/10/12 Python
tensorflow如何继续训练之前保存的模型实例
2020/01/21 Python
Python selenium如何打包静态网页并下载
2020/08/12 Python
HTML5 SEO优化的一些建议
2020/08/27 HTML / CSS
印尼在线购买隐形眼镜网站:Lensza.co.id
2019/04/27 全球购物
Street One瑞士:德国现代时装公司
2019/10/09 全球购物
经济管理专业毕业生自荐信范文
2014/01/02 职场文书
表扬信格式
2014/01/12 职场文书
春节联欢晚会主持词
2014/03/24 职场文书
办公室领导干部作风整顿个人整改措施
2014/09/17 职场文书