メインコンテンツまでスキップ
Version: Next

条件レンダリング

If ブロック

条件付きでマークアップをレンダリングするには、それを if ブロックでラップします:

use yew::prelude::*;

html! {
if true {
<p>{ "True case" }</p>
}
};

let バインディングと複数の子要素

if/elsematchfor のブレース付き本体はすべて、html 子要素の前に let バインディングを使用でき、フラグメントで囲まずに複数の子要素を記述できます:

use yew::prelude::*;

html! {
if condition {
let label = format!("count: {count}");
<h2>{"Result"}</h2>
<span>{label}</span>
} else {
"nothing"
}
};

let バインディングはすべての html 子要素の前に記述する必要があり、交互に配置することはできません。

Match ブロック

match 式は html! 内で直接使用でき、if/else と同じパターンに従います:

use yew::prelude::*;

let value: Option<String> = Some("hello".into());

html! {
match value {
Some(text) => <p>{text}</p>,
None => <p>{"Nothing here"}</p>,
}
};

単一要素のアームはブレースを省略できます。複数の子要素や let バインディングを持つアームにはブレースが必要です。

match は OR パターン(A | B)、分割代入、if ガードを含む、すべての標準的な Rust パターンをサポートします。網羅性は Rust コンパイラによってチェックされます。