6 个版本
0.1.5 | 2019 年 7 月 13 日 |
---|---|
0.1.4 | 2019 年 5 月 27 日 |
0.1.2 | 2019 年 4 月 13 日 |
0.1.1 | 2019 年 2 月 5 日 |
#24 在 #web-frontend
在 plaster-router-macro 中使用
135KB
3K SLoC
用法
use plaster_router::{Routes, route_to};
#[derive(Routes)]
pub enum MyRoutes {
#[route("/posts")]
Posts,
#[route("/posts/:id")]
Post { id: String },
}
pub struct MyComponent {
router: Router<MyRoutes>,
}
impl Component for MyComponent {
fn create(_:_, mut context: ComponentLink<Self>) -> MyComponent {
let mut router = MyRoutes::router(context.send_back(|| Msg::RouteUpdate));
MyComponent {
router: router,
}
}
fn update(msg: Msg) -> ShouldRender {
match msg {
Msg::RouteUpdate => true,
Msg::RouteTo(route) => { route_to(&route); true },
}
}
}
impl Renderable<MyComponent> on MyComponent {
fn view(&self) -> Html<MyComponent> {
match self.router.resolve() {
Some(MyRoutes::Posts) => html! {
<button onclick=|_| Msg::RouteTo("/posts/1".to_string()),>Post 1</button>
},
Some(MyRoutes::Post { id }) => html! {
<h1>{format!("Post {}", id)}</h1>
},
None => html! {
<h1>404 Not Found</h1>
}
}
}
}
依赖
~7–9.5MB
~188K SLoC