Literals & Expressions

Literals

If expressions resolve to types that implement Display, they will be converted to strings and inserted into the DOM as a Text node.

All display text must be enclosed by {} blocks because text is handled like an expression. This is the largest deviation from normal HTML syntax that Yew makes.


#![allow(unused_variables)]
fn main() {
let text = "lorem ipsum";
html!{
    <>
        <div>{text}</div>
        <div>{"dolor sit"}</div>
        <span>{42}</span>
    </>
}
}

Expressions

You can insert expressions in your HTML using {} blocks, as long as they resolve to Html


#![allow(unused_variables)]
fn main() {
html! {
  <div>
    {
      if show_link {
        html! {
          <a href="https://example.com">{"Link"}</a>
        }
      } else {
        html! {}
      }
    }
  </div>
}
}

It often makes sense to extract these expressions into functions or closures to optimize for readability:


#![allow(unused_variables)]
fn main() {
let show_link = true;
let maybe_display_link = move || -> Html {
  if show_link {
    html! {
      <a href="https://example.com">{"Link"}</a>
    }
  } else {
    html! {}
  }
};

html! {
     <div>{maybe_display_link()}</div>
}
}