63
Vue 3 學習之旅
進階功能

Day 63: 渲染函數 (Render Functions) 與 h()

·6 分鐘閱讀·進階功能

摘要

渲染函數是 Vue 模板的一種更接近編譯器的替代方案。它允許我們使用純 JavaScript 來程式化地、完全動態地建構元件的 DOM 結構。

定義與說明

渲染函數通常回傳一個「虛擬節點」(VNode),Vue 根據這個 VNode 來渲染真實的 DOM。我們使用全域的 h() 函數(Hyperscript 的縮寫)來建立 VNode。

h() 函數接收三個參數:

  • type:HTML 標籤名或元件。
  • props:一個包含屬性、特性和事件的物件。
  • children:一個包含子節點的字串或陣列。

實作範例

Vue SFC
// 使用渲染函數建立一個標題元件。
import { h } from 'vue';

export default {
  props: ['level'],
  render() {
    // 等同於 <template><h1 v-if="level === 1">...</h1>...</template>
    return h(
      `h${this.level}`, // 1. type: 動態標籤名
      {}, // 2. props: 空物件
      this.$slots.default() // 3. children: 預設插槽內容
    );
  }
}

結論

渲染函數提供了比模板更高的編程自由度,適用於需要高度動態邏輯的場景。但它也更冗長、更抽象,對於大多數應用,模板是更簡單、更高效的選擇。

渲染函數 h() VNode