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与框架页的操作代码
Jan 17 Javascript
javascript之典型高阶函数应用介绍
Jan 10 Javascript
JavaScript让网页出现渐隐渐显背景颜色的方法
Apr 21 Javascript
简介JavaScript中的setTime()方法的使用
Jun 11 Javascript
jQuery实现的文字逐行向上间歇滚动效果示例
Sep 06 jQuery
微信小程序实现文字跑马灯效果
May 26 Javascript
vue cli webpack中使用sass的方法
Feb 24 Javascript
如何自动化部署项目?折腾服务器之旅~
Apr 16 Javascript
vue实现行列转换的一种方法
Aug 06 Javascript
微信小程序实现打开并下载服务器上面的pdf文件到手机
Sep 20 Javascript
JavaScript实现雪花飘落效果
Dec 27 Javascript
详解Anyscript开发指南绕过typescript类型检查
Sep 23 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
一个取得文件扩展名的函数
2006/10/09 PHP
IIS+fastcgi下PHP运行超时问题的解决办法详解
2013/06/20 PHP
推荐一款PHP+jQuery制作的列表分页的功能模块
2014/10/14 PHP
php如何把表单内容提交到数据库
2019/07/08 PHP
php集成开发环境详解
2019/09/24 PHP
js function定义函数使用心得
2010/04/15 Javascript
Javascript 面向对象编程(coolshell)
2012/03/18 Javascript
根据IP的地址,区分不同的地区,查看不同的网站页面的js代码
2013/02/26 Javascript
extjs表格文本启用选择复制功能具体实现
2013/10/11 Javascript
javascript实现判断鼠标的状态
2015/07/10 Javascript
JS封装的自动创建表格的实现代码
2016/06/15 Javascript
原生JS获取元素集合的子元素宽度实例
2016/12/14 Javascript
bootstrap laydate日期组件使用详解
2017/01/04 Javascript
vue-router 学习快速入门
2017/03/01 Javascript
vue.js在标签属性中插入变量参数的方法
2018/03/06 Javascript
JavaScript中的一些实用小技巧总结
2019/04/07 Javascript
详解Vue中组件的缓存
2019/04/20 Javascript
小程序实现上下切换位置
2020/11/16 Javascript
详解Vue的mixin策略
2020/11/19 Vue.js
编写Python脚本来获取Google搜索结果的示例
2015/05/04 Python
Python文件与文件夹常见基本操作总结
2016/09/19 Python
python实现遍历文件夹修改文件后缀
2018/08/28 Python
Python 基于wxpy库实现微信添加好友功能(简洁)
2019/11/29 Python
使用python的turtle函数绘制一个滑稽表情
2020/02/28 Python
Django 实现将图片转为Base64,然后使用json传输
2020/03/27 Python
pip已经安装好第三方库但pycharm中import时还是标红的解决方案
2020/10/09 Python
ECCO爱步官方旗舰店:丹麦鞋履品牌
2018/01/02 全球购物
外语专业毕业生自荐信
2014/04/14 职场文书
校本教研活动总结
2014/07/01 职场文书
社会工作专业自荐信
2014/09/26 职场文书
我的中国梦主题教育活动总结
2015/05/07 职场文书
地道战观后感400字
2015/06/04 职场文书
有关朝花夕拾的读书笔记
2015/06/29 职场文书
2015年秋季小学开学标语
2015/07/16 职场文书
财务会计个人原因辞职信
2019/06/21 职场文书
Python+Tkinter打造签名设计工具
2022/04/01 Python