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查看对象功能代码
Apr 25 Javascript
Firefox和IE兼容性问题及解决方法总结
Oct 08 Javascript
jQuery插件jPaginate实现无刷新分页
May 04 Javascript
JS+JSP通过img标签调用实现静态页面访问次数统计的方法
Dec 14 Javascript
浅谈js对象属性 通过点(.) 和方括号([]) 的不同之处
Oct 29 Javascript
Vue.js系列之项目搭建(1)
Jan 03 Javascript
微信小程序 es6-promise.js封装请求与处理异步进程
Jun 12 Javascript
bing Map 在vue项目中的使用详解
Apr 09 Javascript
通过jquery toggleClass()属性制作文章段落更改背景颜色
May 21 jQuery
vue-cli3+typescript初体验小结
Feb 28 Javascript
微信小程序点击列表跳转到对应详情页过程解析
Sep 26 Javascript
JS实现吸顶特效
Jan 08 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
ADODB结合SMARTY使用~超级强
2006/11/25 PHP
php读取数据库信息的几种方法
2008/05/24 PHP
php xml文件操作代码(一)
2009/03/20 PHP
PHP二分查找算法示例【递归与非递归方法】
2016/09/29 PHP
YII2框架中ActiveDataProvider与GridView的配合使用操作示例
2020/03/18 PHP
你必须知道的Javascript知识点之&quot;深入理解作用域链&quot;的介绍
2013/04/23 Javascript
javascript ready和load事件的区别示例介绍
2013/08/30 Javascript
Nodejs实现的一个静态服务器实例
2014/12/06 NodeJs
js实现点击按钮后给Div图层设置随机背景颜色的方法
2015/05/06 Javascript
基于JavaScript实现高德地图和百度地图提取行政区边界经纬度坐标
2016/01/22 Javascript
Google 地图控件集详解及实例代码
2016/08/06 Javascript
react系列从零开始_简单谈谈react
2017/07/06 Javascript
clipboard.js在移动端复制失败的解决方法
2018/06/13 Javascript
Vue源码解读之Component组件注册的实现
2018/08/24 Javascript
webpack4 SCSS提取和懒加载的示例
2018/09/03 Javascript
详解基于webpack&amp;gettext的前端多语言方案
2019/01/29 Javascript
Vue传参一箩筐(页面、组件)
2019/04/04 Javascript
JavaScript封闭函数及常用内置对象示例
2019/05/13 Javascript
JS实现的自定义map方法示例
2019/05/17 Javascript
Vue 实现复制功能,不需要任何结构内容直接复制方式
2019/11/09 Javascript
ES6 Iterator遍历器原理,应用场景及相关常用知识拓展详解
2020/02/15 Javascript
javascript设计模式 ? 中介者模式原理与用法实例分析
2020/04/20 Javascript
vue实现多个echarts根据屏幕大小变化而变化实例
2020/07/19 Javascript
完美解决安装完tensorflow后pip无法使用的问题
2018/06/11 Python
Python判断字符串是否为字母或者数字(浮点数)的多种方法
2018/08/03 Python
Python如何使用函数做字典的值
2019/11/30 Python
pandas创建DataFrame的7种方法小结
2020/06/14 Python
pycharm 快速解决python代码冲突的问题
2021/01/15 Python
Html5 canvas画图白板踩坑
2020/06/01 HTML / CSS
Chantelle仙黛尔内衣美国官网:法国第一品牌内衣
2018/07/26 全球购物
数控技术与应用毕业生自荐信
2013/09/24 职场文书
个人四风问题对照检查材料思想汇报
2014/10/06 职场文书
2015年安全生产月活动总结
2015/03/26 职场文书
新学期开学寄语2016
2015/12/04 职场文书
2016年小学教师政治学习心得体会
2016/01/23 职场文书
初中思品教学反思
2016/02/20 职场文书