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.pswp.cn/bicheng/73781.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/73781.shtml
英文地址,請注明出處:http://en.pswp.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 是一個接口,用于管理對象的引用計數。它的主要功能和作用包括: 引用計數管理: 提供…