跳至主要內容
版本:0.21

函數元件

讓我們重新檢視這個先前的陳述

Yew 的核心運作方式在於將重複使用的 UI 所需要的所有內容集中在單一位置,也就是 Rust 檔案。

我們將透過介紹定義應用程式邏輯和表示行為的概念:「元件」來完善這項陳述。

元件是什麼?

元件是 Yew 的建構模組。

它們

  • 屬性 的形式接收引數
  • 可以擁有它們自己的狀態
  • 計算使用者可見的 HTML 內容(DOM)

兩種 Yew 元件類型

你目前正在閱讀關於函數元件的文章,這是開始使用 Yew 撰寫元件以及撰寫簡單表示邏輯時建議的方法。

有更進階但較難入門的方法來撰寫元件 - struct 元件。它們允許極其細部的控制,儘管大部分時間你都不需要這麼細部。

建立函式元件

若要建立函式元件,請將 #[function_component] 屬性新增到一個函數中。依慣例,函數會使用 PascalCase 命名,就像所有元件一樣,以區別此函數於 html! 巨集內部中一般 html 元素的用途。

use yew::{function_component, html, Html};

#[function_component]
fn HelloWorld() -> Html {
html! { "Hello world" }
}

// Then somewhere else you can use the component inside `html!`
#[function_component]
fn App() -> Html {
html! { <HelloWorld /> }
}

元件會發生什麼事

在渲染時,Yew 會建立這些元件的虛擬樹。它會呼叫每個(函式)元件的檢視函數來計算你作為函式庫使用者在 Html 類型中所看到的 DOM 的虛擬版本(VDOM)。以下一個範例來說,會看起來像這樣

<App>
<HelloWorld>
<p>"Hello world"</p>
</HelloWord>
</App>

當需要更新時,Yew 會再次呼叫檢視函數,並將新的虛擬 DOM 與先前的版本進行調整,僅將新/已變更/必要的部份傳播到實際 DOM。這就是我們所說的渲染

備註

在幕後,Html 只是 VNode 的別名 - 一個虛擬節點。