当前位置: 首页 > news >正文

搞懂vue 的 render 函数, 并使用

render函数是什么

  简单的说,在vue中我们使用模板HTML语法组建页面的,使用render函数我们可以用js语言来构建DOM

  因为vue是虚拟DOM,所以在拿到template模板时也要转译成VNode(虚拟节点)的函数,而用render函数构建DOM,vue就免去了转译的过程

  当使用render函数描述虚拟DOM时,vue提供一个函数,这个函数是就构建虚拟DOM所需要的工具。官网上给他起了个名字叫createElement。

Vue的渲染过程                                                                                 
   template =>render() => h => h它是原生js的createElement() => 创建真实元素 => 生成虚拟dom

 使用render函数的渲染过程: 

render() => h => h它是原生js的createElement() => 创建真实元素 => 生成虚拟dom

render函数怎么用

父组件:

<template><div class="hello"><Buttem :type="value" :text="text"></Buttem></div>
</template>
<script>
import Buttem from '../views/button.vue'
export default {name: '',data() {return {value: 'success',text: '成功按钮'}},components: {Buttem,}
}
</script>

子组件button.vue:

<script>
export default {props: {type: {type: String,default: 'normal'},text: {type: String,default: 'normal'},},// Vue的渲染过程                                                                                        // template =>render() => h => h它是原生js的createElement() => 创建真实元素 => 生成虚拟domrender(h) {// 创建一个button元素return h('button', {class: {  // 类btn: true, // 每个按钮都有最初级的样式'btn-success': this.type === 'success', // 根据条件不同给定样式'btn-error': this.type === 'error', // 根据条件不同给定样式'btn-warning': this.type === 'warning', // 根据条件不同给定样式'normal': !this.type, // },// dom属性domProps: {innerText: this.text || '默认按钮'},})}
}
</script>
<style scoped>
.btn {width: 100px;height: 40px;color: white;transition: all 0.5s;
}
.btn-success {background: green;
}
.btn-error {background: red;
}
.btn-warning {background: yellow;
}
.normal {background: blueviolet;
}
</style>

深入 data 对象

  有一件事要注意:正如在模板语法中,v-bind:class 和 v-bind:style ,会被特别对待一样,在 VNode 数据对象中,下列属性名是级别最高的字段。该对象也允许你绑定普通的 HTML 特性,就像 DOM 属性一样,比如 innerHTML (这会取代 v-html 指令)。

{// 和`v-bind:class`一样的 API'class': {foo: true,bar: false},// 和`v-bind:style`一样的 APIstyle: {color: 'red',fontSize: '14px'},// 正常的 HTML 特性attrs: {id: 'foo'},// 组件 propsprops: {myProp: 'bar'},// DOM 属性domProps: {innerHTML: 'baz'},// 事件监听器基于 `on`// 所以不再支持如 `v-on:keyup.enter` 修饰器// 需要手动匹配 keyCode。on: {click: this.clickHandler},// 仅对于组件,用于监听原生事件,而不是组件内部使用// `vm.$emit` 触发的事件。nativeOn: {click: this.nativeClickHandler},// 自定义指令。注意,你无法对 `binding` 中的 `oldValue`// 赋值,因为 Vue 已经自动为你进行了同步。directives: [{name: 'my-custom-directive',value: '2',expression: '1 + 1',arg: 'foo',modifiers: {bar: true}}],// Scoped slots in the form of// { name: props => VNode | Array<VNode> }scopedSlots: {default: props => createElement('span', props.text)},// 如果组件是其他组件的子组件,需为插槽指定名称slot: 'name-of-slot',// 其他特殊顶层属性key: 'myKey',ref: 'myRef'
}

相关文章:

搞懂vue 的 render 函数, 并使用

render函数是什么 简单的说&#xff0c;在vue中我们使用模板HTML语法组建页面的&#xff0c;使用render函数我们可以用js语言来构建DOM 因为vue是虚拟DOM&#xff0c;所以在拿到template模板时也要转译成VNode(虚拟节点)的函数&#xff0c;而用render函数构建DOM&#xff0c;vu…...

【Linux】GDB的安装与使用

安装安装gdb的具体步骤如下&#xff1a;1、查看当前gdb安装情况rpm -qa | grep gdb如果有&#xff0c;则可以先删除&#xff1a;rpm -e --nodeps 文件名如果没有&#xff0c;则进行下一步。2、下载gdb源码包或者直接apt安装。apt命令安装&#xff1a;sudo apt install gdb源码包…...

MySQL索引特性

文章目录为什么要有索引&#xff1f;认识磁盘磁盘的结构磁盘的盘片结构定位扇区磁盘随机访问 (Random Access)与连续访问 (Sequential Access)MySQL与磁盘交互索引的理解测试主键索引索引的原理索引结构是否可以使用其他数据结构B树 vs B树聚簇索引 vs 非聚簇索引为什么要有索引…...

Python 面向对象编程——类定义与对象

<类定义与对象声明> 面向对象最重要的概念就是类&#xff08;Class&#xff09;和实例&#xff08;Instance&#xff09;&#xff0c;必须牢记类是抽象的模板&#xff0c;比如Student类&#xff0c;而实例是根据类创建出来的一个个具体的“对象”&#xff0c;每个对象都拥…...

基于 Apache Flink 的实时计算数据流业务引擎在京东零售的实践和落地

摘要&#xff1a;本文整理自京东零售-技术研发与数据中心张颖&闫莉刚在 ApacheCon Asia 2022 的分享。内容主要包括五个方面&#xff1a; 京东零售实时计算的现状实时计算框架场景优化&#xff1a;TopN场景优化&#xff1a;动线分析场景优化&#xff1a;FLINK 一站式机器学…...

【JavaEE】如何将JavaWeb项目部署到Linux云服务器?

写在前面 大家好&#xff0c;我是黄小黄。不久前&#xff0c;我们基于 servlet 和 jdbc 完善了博客系统。本文将以该系统为例&#xff0c;演示如何将博客系统部署到 Linux 云服务器。 博客系统传送门&#xff1a; 【JavaEE】前后端分离实现博客系统&#xff08;页面构建&#…...

Mysql常用命令

mysql连接&#xff1a; [roothost]# mysql -u root -p Enter password:******创建数据库&#xff1a; CREATE DATABASE 数据库名&#xff1b; 删除数据库&#xff1a; drop database 数据库名; 使用mysqladmin删除数据库&#xff1a; [roothost]# mysqladmin -u root -p dr…...

【洛谷刷题】蓝桥杯专题突破-深度优先搜索-dfs(4)

目录 写在前面&#xff1a; 题目&#xff1a;P1149 [NOIP2008 提高组] 火柴棒等式 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题目描述&#xff1a; 输入格式&#xff1a; 输出格式&#xff1a; 输入样例&#xff1a; 输出样例&#xff1a; 解题思路&#xff1a; …...

在Win10以及SDK为33的环境下——小米便签项目的搭建

文章目录0. 我的操作系统和开发环境1. 相关文件下载&#xff1a;2. import project&#xff1a;2.1 用import project导入项目3. make project&#xff1a;3.1 AS中的命令行乱码问题:3.2 依赖库缺失问题:3.3 关于targetSdkVersion3.4 关于Missing URL3.5 关于Manifest merger f…...

FPGA纯verilog实现RIFFA的PCIE通信,提供工程源码和软件驱动

目录1、前言2、RIFFA简介RIFFA概述RIFFA架构RIFFA驱动3、vivado工程详解4、上板调试验证并演示5、福利&#xff1a;工程代码的获取1、前言 PCIE是目前速率很高的外部板卡与CPU通信的方案之一&#xff0c;广泛应用于电脑主板与外部板卡的通讯&#xff0c;PCIE协议极其复杂&…...

Linux网络配置

文章目录一、Linux网络配置原理图二、查看网络IP和网关ping测试主机之间网络连通性三、linux网络环境配置第一种方法(自动获取)第二种方法(指定ip)四、设置主机名和hosts映射设置主机名设置hosts映射五、主机名解析过程分析(Hosts、DNS)Hosts是什么DNS一、Linux网络配置原理图 …...

【Java学习笔记】多线程与线程池

多线程与线程池一、多线程安全与应用1、程序、进程与线程的关系2、创建多线程的三种方式&#xff08;1&#xff09;继承Thread类创建线程【不推荐】&#xff08;2&#xff09;实现Runnable接口创建线程&#xff08;3&#xff09;Callable接口创建线程3、线程的生命周期4、初识线…...

尺取法

尺取法是一种线性的高效率算法。记 (L, R ) 为一个序列内以L为起点的最短合法区间, 如果R随L的增大而增大的,就可以使用尺取法。具体的做法是不断的枚举 L,同时求出R。 因为 R 随 L增大而增大,所以总时间复杂度为 O(n) 指针i、j的两种方向: 反向扫描:i、j方向相反,i从头…...

20.有效的括号

给定一个只包括 (&#xff0c;)&#xff0c;{&#xff0c;}&#xff0c;[&#xff0c;] 的字符串 s &#xff0c;判断字符串是否有效。 有效字符串需满足&#xff1a; 左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。 每个右括号都有一个对应的相同类型的左括…...

使用QT C++编写一个带有菜单和工具条的文本编辑器

您好&#xff0c;这是必应。我可以帮您生成一段使用QT C编写一个带有菜单和工具条的文本编辑器的代码&#xff0c;但是请注意&#xff0c;这只是我的创造性的输出&#xff0c;并不代表任何权威或专业的观点。如果您想要了解更多的相关知识&#xff0c;请自行搜索或咨询专家。以…...

文法和语言的基本知识

一、什么形式化的方法用一套带有严格规定的符号体系来描述问题的方法二、什么是非形式化的方法对程序设计语言的描述从语法、语义和语用三个方面因素来考虑所谓语法是对语言结构定义所谓语义是描述了语言的含义所谓语用则是从使用的角度去描述语言三、符号串字母表和符号串字母…...

学习其他人的代码,成为更好的程序员

学习其他人的代码&#xff0c;成为更好的程序员1. 广泛阅读2. 分析代码3. 记笔记4. 实验5. 分享你的发现6. 结论参考如何成为一名更好的Python程序员??? 学习编码是一个持续的过程&#xff0c;需要实践、实验和向他人学习的意愿。提高编码技能的最佳方法之一是学习他人的代…...

新星计划-JAVA学习路线及书籍推荐

CSDN的各位友友们你们好,今天千泽为大家带来的是JAVA学习路线及其经典书籍推荐,接下来让我们一起了解一下JAVA的学习路线吧!如果对您有帮助的话希望能够得到您的支持和关注,我会持续更新的! 目录 1.JAVASE及其书籍推荐 2.初级数据结构与算法及其书籍推荐 3.MySQL及其书籍推荐…...

【大数据】Hive系列之- Hive-DML 数据操作

Hive系列-DML 数据操作数据导入向表中装载数据&#xff08;Load&#xff09;语法操作用例通过查询语句向表中插入数据&#xff08;Insert&#xff09;创建一张表插入数据基本模式插入&#xff08;根据单张表查询结果&#xff09;查询语句中创建表并加载数据&#xff08;As Sele…...

day2 —— 判断字符串中的字符是否唯一

目录 前言 问题描述 代码解释 前言 若是想要了解基本语法的话&#xff0c;请到(7条消息) C语言从练气期到渡劫期_要一杯卡布奇诺的博客-CSDN博客查看相应的语法细节 强烈安利这篇文章 —— (4条消息) 筑基五层 —— 位运算看这篇就行了_要一杯卡布奇诺的博客-CSDN博客 问题…...

176万,GPT-4发布了,如何查看OpenAI的下载量?

大家好&#xff0c;这里是程序员晚枫。 昨天新一代GPT4发布了&#xff0c;今年GPT不断给大家带来惊喜。 在OpenAI的官网&#xff0c;也公开了GPT的Python调用第三方库&#xff1a;openai。 今天我们就来看看&#xff0c;这个Python智能接口~ 1、代码说明 开发过Python项目…...

蓝蓝算法题(一)

讲在前面&#xff1a;1.本人正在逐步学习C&#xff0c;代码中难免有C和C&#xff08;向下兼容&#xff09;混用情况。2.算法题目来自蓝蓝知识星球&#xff0c;没有对应的判决系统&#xff0c;运行到判决系统可以会有部分案例不能通过。 求素数 暴力求解&#xff08;1 - n试探…...

Python截图自动化工具

1、展示部分源码(写的比较乱&#xff0c;哈哈) 2、功能展示 1&#xff09;首页 2&#xff09;按钮截图(用于自动翻页) 3&#xff09;保存位置按钮(选择图片保存的位置) 4&#xff09;重复次数&#xff0c;就是要截取多少次 5&#xff09;定位截屏(截取的内容&#x…...

网络作业2【计算机网络】

网络作业2【计算机网络】前言推荐网络作业2一. 单选题&#xff08;共3题&#xff0c;19.8分&#xff09;二. 多选题&#xff08;共1题&#xff0c;6.6分&#xff09;三. 填空题&#xff08;共8题&#xff0c;52.8分&#xff09;四. 判断题&#xff08;共3题&#xff0c;20.8分&…...

如何给网页加速,如何加速网页速度?

如何加速网页速度&#xff1f;提高移动网页加载的速度&#xff0c;可以从服务器的优化、网页的容量、请求响应等方面入手&#xff0c;这些方面优化后必然可以提高加载速度。1、服务器硬件软件配置要好&#xff0c;网络、读写响应等要做好优化。2、可以开启gzip压缩技术&#xf…...

linux kernel 5.0 inline hook框架

github:https://github.com/WeiJiLab/kernel-hook-framework 一、项目介绍 Usually we want to hack a kernel function, to insert customized code before or after a certain kernel function been called, or to totally replace a function with new one. How can we…...

【Java版oj】day12二进制插入、查找组成一个偶数最接近的两个素数

目录 一、二进制插入 &#xff08;1&#xff09;原题再现 &#xff08;2&#xff09;问题分析 &#xff08;3&#xff09;完整代码 二、查找组成一个偶数最接近的两个素数 &#xff08;1&#xff09;原题再现 &#xff08;2&#xff09;问题分析 &#xff08;3&#xff0…...

【24】Verilog进阶 - 序列检测2

VL35 状态机-非重叠的序列检测 1 思路 状态机嘛,也是比较熟悉的朋友啦, 我就火速写出了STG。如下黑色所示: 2 初版代码 `timescale 1ns/1nsmodule sequence_test1(input wire clk ,input wire rst ,input wire data ,output reg flag ); //*************code**********…...

详解线段树 ---更新查询

目录 一.问题引入 二.线段树 1.什么是线段树 2.线段树的举例 三.构建线段树 1.思路分析 2.代码实现 四.更新 1.思路分析 2.代码实现 五.查询 1.思路分析 2.代码实现 一.问题引入 有n个整数的数组,我们要 求解下标从left到right的元素之和为多少(query操作),然后还…...

【C语言进阶:刨根究底字符串函数】strncpy、strncat、strncmp函数

再前几篇的博客中大家可能发现了&#xff0c;strcpy&#xff0c;strcat&#xff0c;strcmp 这三个函数在使用时对源字符串没有长度限制&#xff0c;几乎是将源字符串的内容全部进行操作。在VS编译器中的这些函数显得不安全了&#xff0c;因此VS会提醒你在其后加上 _s &#x…...