1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- //! A simple example of a router with a few routes and a nav bar.
- use dioxus::prelude::*;
- fn main() {
- // launch the router, using our `Route` component as the generic type
- // This will automatically boot the app to "/" unless otherwise specified
- dioxus::launch(|| rsx! { Router::<Route> {} });
- }
- /// By default, the Routable derive will use the name of the variant as the route
- /// You can also specify a specific component by adding the Component name to the `#[route]` attribute
- #[rustfmt::skip]
- #[derive(Routable, Clone, PartialEq)]
- enum Route {
- // Wrap the app in a Nav layout
- #[layout(Nav)]
- #[route("/")]
- Homepage {},
- #[route("/blog/:id")]
- Blog { id: String },
- }
- #[component]
- fn Homepage() -> Element {
- rsx! { h1 { "Welcome home" } }
- }
- #[component]
- fn Blog(id: String) -> Element {
- rsx! {
- h1 { "How to make: " }
- p { "{id}" }
- }
- }
- /// A simple nav bar that links to the homepage and blog pages
- ///
- /// The `Route` enum gives up typesafe routes, allowing us to rename routes and serialize them automatically
- #[component]
- fn Nav() -> Element {
- rsx! {
- nav {
- li {
- Link { to: Route::Homepage {}, "Go home" }
- }
- li {
- Link {
- to: Route::Blog {
- id: "Brownies".to_string(),
- },
- onclick: move |_| { println!("Clicked on Brownies") },
- "Learn Brownies"
- }
- }
- li {
- Link {
- to: Route::Blog {
- id: "Cookies".to_string(),
- },
- "Learn Cookies"
- }
- }
- }
- div { Outlet::<Route> {} }
- }
- }
|