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 相关文章推荐
JSQL 批量图片切换的实现代码
May 05 Javascript
JavaScript子窗口ModalDialog中操作父窗口对像
Dec 11 Javascript
javascript标签在页面中的位置探讨
Apr 11 Javascript
javascript实现图像循环明暗变化的方法
Feb 25 Javascript
JavaScript之数组(Array)详解
Apr 01 Javascript
jQuery实现在最后一个元素之前插入新元素的方法
Jul 18 Javascript
关于vue.js弹窗组件的知识点总结
Sep 11 Javascript
js设置和获取自定义属性的方法
Oct 20 Javascript
移动端界面的适配
Jan 11 Javascript
javascript操作cookie
Jan 17 Javascript
java和js实现的洗牌小程序
Sep 30 Javascript
Vue环境搭建+VSCode+Win10的详细教程
Aug 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
默默简单的写了一个模板引擎
2007/01/02 PHP
Thinkphp 框架扩展之标签库驱动原理与用法分析
2020/04/23 PHP
JS数组的赋值介绍
2014/03/10 Javascript
Javascript基础知识(二)事件
2014/09/29 Javascript
理解AngularJs指令
2015/12/10 Javascript
addeventlistener监听scroll跟touch(实例讲解)
2017/08/04 Javascript
vue语法之拼接字符串的示例代码
2017/10/25 Javascript
JavaScript的数据类型转换原则(干货)
2018/03/15 Javascript
Node.js使用cookie保持登录的方法
2018/05/11 Javascript
Layui 导航默认展开和菜单栏选中高亮设置的方法
2019/09/04 Javascript
js 下拉菜单点击旁边收起实现(踩坑记)
2019/09/29 Javascript
关于vue组件事件属性穿透详解
2019/10/28 Javascript
云服务器部署Node.js项目的方法步骤(小白系列)
2020/03/23 Javascript
[01:05:52]DOTA2-DPC中国联赛 正赛 Ehome vs Aster BO3 第一场 2月2日
2021/03/11 DOTA
python中二维阵列的变换实例
2014/10/09 Python
Python单元测试框架unittest简明使用实例
2015/04/13 Python
基于Python中capitalize()与title()的区别详解
2017/12/09 Python
python绘制简单折线图代码示例
2017/12/19 Python
Python模拟简单电梯调度算法示例
2018/08/20 Python
Python中的相关分析correlation analysis的实现
2019/08/29 Python
python中resample函数实现重采样和降采样代码
2020/02/25 Python
Python数据分析库pandas高级接口dt的使用详解
2020/12/11 Python
css3 中的新特性加强记忆详解
2016/04/16 HTML / CSS
印度最大的酒店品牌网络:OYO Rooms
2016/07/24 全球购物
俄罗斯旅游网站:Tripadvisor俄罗斯
2017/03/21 全球购物
白兰氏健康Mall:BRAND’S
2017/11/13 全球购物
如何安装ruby on rails
2014/02/09 面试题
董事长秘书职责
2014/01/31 职场文书
数学国培研修感言
2014/02/13 职场文书
建筑安全员岗位职责
2014/03/13 职场文书
2014年药店店长工作总结
2014/11/17 职场文书
学习雷锋精神活动总结
2015/02/06 职场文书
高三生物教学反思
2016/02/22 职场文书
电子表的操作介绍说明书
2019/10/28 职场文书
Java中常用解析工具jackson及fastjson的使用
2021/06/28 Java/Android
Mysql数据库按时间点恢复实战记录
2021/06/30 MySQL