Vue渲染函数 - render 函数

文章目录

  • Vue渲染函数 - render 函数
    • 1. 什么是 render 函数
    • 2、页面展示过程
    • 3、render 函数的参数
    • 4. 如何使用
      • (1)基本渲染
      • (2)传递属性和事件
      • (3)条件渲染
    • 5. render 函数的实际使用
    • 6.View Design 组件中的使用

Vue渲染函数 - render 函数

在 Vue.js 中,render 函数是一种 定义组件如何渲染输出 的方式,允许开发者用 JavaScript 代码来描述组件的布局和结构。这里详细介绍 render 函数的特性、用途和用法。

所谓渲染,就是指 如何显示页面,显示成红色还是绿色?是显示 div 还是span?

注意:render 函数适用于页面的渲染,对于一些功能性的实现,比如想通过render函数将字符串转化为 int 类型等,最好不要放在render函数里。

1. 什么是 render 函数

render 函数是 Vue 组件的一个方法,用于 返回一个虚拟节点(VNode)结构,该结构将被 Vue 转换为真实的 DOM 元素。

代码示例:

render(h) {// 如何展示页面的逻辑
}
  • h:这个参数是一个函数,用于创建虚拟节点。通常,开发者将会将它称为 createElement,但是在 Vue.js 的文档中通常用字母 h 来表示。

2、页面展示过程

当 Vue 组件实例化时,render 函数被调用。其返回的虚拟节点描述了页面需要如何展示。在更新过程中,Vue 只会比较新旧虚拟节点,确认哪些部分需要变更,从而高效地更新 DOM。

3、render 函数的参数

除了常见的 h 参数,render 函数还有一个可选的参数 `context,它包含关于组件的上下文信息,如 props、slots、attrs、scopedSlots 和 listeners 等。

render(h, context) {const { props, slots, attrs, listeners } = context;// 使用 props, slots, attrs, listeners 进行渲染
}

4. 如何使用

下面是一些使用 render 函数的示例。

(1)基本渲染

function render(h) {return h('div', [h('h1', 'Hello, World!'),h('p', 'This is a paragraph.')]);
}

这个示例创建了一个 div,其中包含一个 h1 和一个 p 元素。

(2)传递属性和事件

function render(h) {return h('button', {on: {click: this.handleClick // 绑定事件}}, 'Click Me');
}

在这个示例中,创建了一个按钮,点击时会触发 handleClick 方法。

(3)条件渲染

function render(h) {return h('div', [this.isVisible ? h('p', 'Visible content') : null,h('button', {on: {click: () => { this.isVisible = !this.isVisible; }}}, 'Toggle Visibility')]);
}

这个例子中,按钮用于切换内容的显示与隐藏。

5. render 函数的实际使用

render方法的实质就是生成template模板。render函数生成的内容相当于template的内容,所以使用render函数时,只保留逻辑层即可。

在 Vue.js 中,组件可以分为普通组件函数式组件函数式组件是 Vue.js 提供的一种轻量级组件,它们没有内部的实例 (this) 和生命周期钩子,因此它们的开销相对较小,并且在渲染性能上通常更有优势。函数式组件是通过设置 functional: true 选项来声明的,同时需要定义一个 render 函数一起使用。在后台管理的项目中,以系统导航菜单为例:

<script>
export default {name: 'MenuItem',functional: true,props: {icon: {type: String,default: ''},title: {type: String,default: ''}},render(h, context) {const { icon, title } = context.propsconst vnodes = []if (icon) {vnodes.push(<svg-icon icon-class={icon}/>)}if (title) {if (title.length > 5) {vnodes.push(<span slot='title' title={(title)}>{(title)}</span>)} else {vnodes.push(<span slot='title'>{(title)}</span>)}}return vnodes}
}
</script>

由于没有实例开销和生命周期钩子,函数式组件的渲染通常更高效,适用于渲染性能要求较高的场景,系统导航菜单就是一个很好的例子。

函数式组件在使用上,与普通组件一般无二:

<template><div><item icon="user" title="用户管理" /></div>
</template><script>
import Item from './Item'export default {name: 'SidebarItem',components: { Item }
}
</script>

6.View Design 组件中的使用

Vue 项目中经常会结合各种组件渲染页面,本示例以 View Design 中的 Table组件的 Column 为例,展示 render 函数的使用:

      condTableCol: [// table表格列头信息{title: '序号',key:'number',align: 'left',width: 80,},{title: "头像",key: "headImageUrl",width: 225,align: "left",render: (h, params) => {return h("img", {attrs: { src: params.row.headImageUrl},style: {maxWidth: "50px",maxHeight: "40px",verticalAlign: "middle",marginRight: "10px",},});},},{title: "类型",key: "type",sortable: true,render: (h, params) => {if (params.row.type=== "YES") {return h("span", "通过");} else if (params.row.type === "NO") {return h("span", "驳回");}},align: "left",wiBdth: 150,},{title: "操作",key: "action",// width: '200',align: "center",editable: true,render: (h, params) => {return h("div",{style: {padding: "5px 0",},},[h("Button",{props: {type: "text",size: "small",},style: {display: "inline-block",marginRight: "10px",color: "green",},on: {click: (param) => {this.editInfo(params.row);},},},"编辑",),h("Button",{props: {type: "text",size: "small",},style: {display: "inline-block",marginRight: "10px",color: "green",},on: {click: (param) => {this.remove(params.row);},},},"删除",),],);},},],

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/73781.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

单片机自学总结

自从工作以来&#xff0c;一直努力耕耘单片机&#xff0c;至今&#xff0c;颇有收获。从51单片机&#xff0c;PIC单片机&#xff0c;直到STM32&#xff0c;以及RTOS和Linux&#xff0c;几乎天天在搞:51单片机&#xff0c;STM8S207单片机&#xff0c;PY32F003单片机&#xff0c;…

go回调函数的使用

在Go语言中&#xff0c;回调函数可以有参数&#xff0c;也可以没有参数。它们的定义和使用方式略有不同&#xff0c;但本质上都是将函数作为参数传递给另一个函数&#xff0c;并在适当的时候调用它。以下是带参数和不带参数的回调函数的示例和说明。 1. 不带参数的回调函数 不…

在 Ubuntu 中配置 NFS 共享服务的完整指南

前言 网络文件系统&#xff08;NFS&#xff09;作为 Linux 系统间实现文件共享的标准协议&#xff0c;在分布式计算和容器化部署场景中具有重要作用。本文将详细演示如何在 Ubuntu 系统上配置 NFS 服务端与客户端&#xff0c;并实现可靠的持久化挂载。 一、环境准备 系统要求…

TypeScript Symbols 深度解析:在 Vue3 中的高级应用实践

一、Symbols 核心特性解析 1.1 什么是 Symbol&#xff1f; Symbol 是 ES6 引入的原始数据类型&#xff0c;表示唯一且不可变的值&#xff0c;主要解决对象属性名冲突问题。在 TypeScript 中&#xff0c;我们通过 symbol 类型获得完整的类型支持&#xff1a; const SERIAL_KE…

无需刷机、root,畅享原生安卓的丝滑体验。

Apex Launcher 是一款历史悠久的 Android 桌面启动器&#xff0c;诞生于 Android 系统早期&#xff08;Android 4.0 时代&#xff09;。当时&#xff0c;Android 系统的默认界面被认为较为简陋&#xff0c;无法满足一些追求个性化和高效操作的用户需求。因此&#xff0c;许多开…

Visual Studio Code安装配置优化全攻略:打造高效开发环境

目录 一、背景与意义 二、安装与配置基础 2.1 下载与安装 2.2 核心配置目录 三、深度优化配置指南 3.1 主题与界面优化 3.2 必装效率插件&#xff08;精选TOP10&#xff09; 3.3 性能优化设置 四、实战案例&#xff1a;前端开发环境配置 4.1 项目初始化 4.2 调试配置…

味觉传送器E-Taste:开启虚拟世界的味觉之门

味觉传送器E-Taste&#xff1a;开启虚拟世界的味觉之门 一、发明背景与动机 随着虚拟现实&#xff08;VR&#xff09;和增强现实&#xff08;AR&#xff09;技术的飞速发展&#xff0c;人们在虚拟世界中的沉浸感不断提升&#xff0c;视觉和听觉体验已经取得了显著的突破。然而…

判断质数与合数

判断质数与合数的逻辑很相似&#xff0c;都是判断一个属除了1和它本身&#xff0c;能不能被其他数整除。 其他数包括质数与合数&#xff0c;合数能表示能质数的乘积&#xff0c;因此问题就转化为&#xff1a;一个数能不能被除了1和它本身之外的其他质数整除。 质数2&#xff…

在Spring Boot项目中接入DeepSeek深度求索,感觉笨笨的呢

文章目录 引言1. 什么是DeepSeek&#xff1f;2. 准备工作2.1 注册DeepSeek账号 3.实战演示3.1 application增加DS配置3.2 编写service3.3 编写controller3.4 编写前端界面chat.html3.5 测试 总结 引言 在当今快速发展的数据驱动时代&#xff0c;企业越来越重视数据的价值。为了…

Cursor在内网环境配置自定义DeepSeek API

关键字 Cursor、DeepSeek、API配置、内网代理、HTTP/2 背景环境 使用Cursor集成环境开发程序。但是我使用公司的内网并不能使用cursor自带的模型&#xff0c;于是我就想使用DeepSeek官方的API服务。 环境&#xff1a;Windows 11系统 解决过程 网络检测 首先进行环境检测&am…

RabbitMQ 集群降配

这里写自定义目录标题 摘要检查状态1. 检查 RabbitMQ 服务状态2. 检查 RabbitMQ 端口监听3. 检查 RabbitMQ 管理插件是否启用4. 检查开机自启状态5. 确认集群高可用性6. 检查使用该集群的服务是否做了断开重连 实操1. 负载均衡配置2. 逐个节点降配&#xff08;滚动操作&#xf…

设计模式之外观模式:原理、实现与应用

引言 外观模式&#xff08;Facade Pattern&#xff09;是一种结构型设计模式&#xff0c;它通过提供一个统一的接口来简化复杂系统的使用。外观模式隐藏了系统的复杂性&#xff0c;使得客户端可以通过一个简单的接口与系统交互。本文将深入探讨外观模式的原理、实现方式以及实…

进行交通流预测,使用KAN+Transformer模型

理论基础 KAN&#xff08;Knowledge Augmented Network&#xff09; KAN 是一种知识增强网络&#xff0c;其核心思想是将先验知识融入到神经网络中&#xff0c;以此提升模型的性能与泛化能力。在交通流预测领域&#xff0c;先验知识可以是交通规则、历史交通模式等。通过把这…

TF中 Arg 节点

TF中 Arg 节点 在 TensorFlow 的计算图中&#xff0c;_Arg 节点&#xff08;Argument Node&#xff09;表示函数的输入参数&#xff0c;是计算图中负责接收外部输入数据的节点。它的名字来源于“Argument”&#xff08;参数&#xff09;&#xff0c;直接对应函数调用时传入的张…

Educational Codeforces Round 176 (Rated for Div. 2)

A.To Zero 签到题 void solve() { int n,k;cin>>n>>k;int k2k/2*2;int k1(k2<k)?k:k-1;int cnt0;if(n%21){n-k1;cnt;cnt(n/k2)(n%k2!0);}else {cnt(n/k2)(n%k2!0);}cout<<cnt<<endl;}B.Array Recoloring 手推一下可以发现&#xff0c;答案其实就…

Kubernetes的Service详解

一、Service介绍 在 kubernetes 中&#xff0c; pod 是应用程序的载体&#xff0c;我们可以通过 pod 的 ip 来访问应用程序&#xff0c;但是 pod 的 ip 地址不是固定的&#xff0c;这也就意味着不方便直接采用pod 的 ip 对服务进行访问。 为了解决这个问题&#xff0c;kuberne…

基于Nvidia Jetson Nano边缘计算设备使用TensorRT部署YOLOv8模型实现目标检测推理

0、背景 最近拿到一台边缘计算设备&#xff0c;在部署YOLO模型的过程中遇到一些问题&#xff0c;特此记录。 设备介绍信息&#xff1a;NVIDIA Jetson Orin Nano T201Developer Kit 开发套件 开发者套件&#xff1a;Jetson Orin Nano T201 8GB开发套件 使用指南文档&#x…

让人感到疑惑的const

const 关键字在不同的编程语言中有着不同的含义和限制&#xff0c;但通常它被用来声明一个常量或只读变量。然而&#xff0c;在 JavaScript 中&#xff0c;const 的行为有时可能会让人感到困惑&#xff0c;因为它并不总是意味着“不可变”&#xff08;immutable&#xff09;。让…

Python 列表全面解析

关于Python列表的详细教程&#xff0c;涵盖增删改查、切片、列表推导式及核心方法 一、 列表基础 1.1 创建列表 列表是Python中最常用的数据结构之一&#xff0c;支持动态存储多种类型的元素。 # 空列表 empty_list []# 初始化列表 numbers [1, 2, 3, 4] fruits ["a…

【Ratis】ReferenceCountedObject接口的作用及参考意义

Apache Ratis的项目源码里,大量用到了自定义的ReferenceCountedObject接口。 本文就来学习一下这个接口的作用,并借鉴一下它解决的问题和实现原理。 功能与作用 ReferenceCountedObject 是一个接口,用于管理对象的引用计数。它的主要功能和作用包括: 引用计数管理: 提供…