Justin Starry 43e9347269
Add render method to Component and auto implement Renderable (#563)
* Add render method to Component and auto implement Renderable

* More cleanup

* Rename Renderable method from view to render

* Doc fixes

* fix

* Update CHANGELOG.md
2019-09-30 22:23:25 -04:00

63 lines
1.6 KiB
Rust

#![recursion_limit = "128"]
use stdweb::web::Date;
use yew::services::ConsoleService;
use yew::{html, Component, ComponentLink, Html, ShouldRender};
pub struct Model {
console: ConsoleService,
value: i64,
}
pub enum Msg {
Increment,
Decrement,
Bulk(Vec<Msg>),
}
impl Component for Model {
type Message = Msg;
type Properties = ();
fn create(_: Self::Properties, _: ComponentLink<Self>) -> Self {
Model {
console: ConsoleService::new(),
value: 0,
}
}
fn update(&mut self, msg: Self::Message) -> ShouldRender {
match msg {
Msg::Increment => {
self.value = self.value + 1;
self.console.log("plus one");
}
Msg::Decrement => {
self.value = self.value - 1;
self.console.log("minus one");
}
Msg::Bulk(list) => {
for msg in list {
self.update(msg);
self.console.log("Bulk action");
}
}
}
true
}
fn view(&self) -> Html<Self> {
html! {
<div>
<nav class="menu">
<button onclick=|_| Msg::Increment>{ "Increment" }</button>
<button onclick=|_| Msg::Decrement>{ "Decrement" }</button>
<button onclick=|_| Msg::Bulk(vec![Msg::Increment, Msg::Increment])>{ "Increment Twice" }</button>
</nav>
<p>{ self.value }</p>
<p>{ Date::new().to_string() }</p>
</div>
}
}
}