Writing html!
Static text
Text that will never change can be typed right into your HTML
#![allow(unused)] fn main() { use percy_dom::prelude::*; html!{ <div> Text goes here </div> }; }
Text variables
Text variables must be wrapped in braces.
#![allow(unused)] fn main() { use percy_dom::prelude::*; let text_var = " world"; html! { Hello { <div> { text_var } </div> } } }
Attributes
Attributes work just like regular HTML.
#![allow(unused)] fn main() { let view = html!{ <div id='my-id' class='big wide'></div> }; }
Event Handlers
#![allow(unused)] fn main() { html! { <button onclick=move|_event: web_sys::MouseEvent| { web_sys::console::log_1(&"clicked!".into()); } > Click me! </button> } }
Nested components
html!
calls can be nested.
#![allow(unused)] fn main() { let view1 = html!{ <em> </em> }; let view2 = html{ <span> </span> } let parent_view = html! { <div> { view1 } { view2 } { html! { Nested html! call } } </div> }; let html_string = parent_view.to_string(); // Here's what the String looks like: // <div><em></em><span></span>Nested html! call</div> }
Iterable Children
Any type that implements IntoIter
#![allow(unused)] fn main() { let list = vec!["1", "2", "3"] .map(|item_num| { html! { <li> List item number { item_num } </li> } }); html! { <ul> { list } >/ul> } }
Comments
You can use Rust comments within your HTML
#![allow(unused)] fn main() { html! { /* Main Div */ <div> <br /> // Title <h2>Header</h2> <br /> </div> } }