There are a few different changes in here that probably need to be picked
apart. I'm sure much of this is wrong.
* Fix missing `dyn` that compiler complained about in router.rs
* Make UseRoute store a `Rc<RouterService>` rather than a string so we can get
information out of the router like current location.
* Implement `UseRoute`'s nth_segment and last_segment methods. I changed the
return type to a String because of the above.
* Remove some unused imports in platform/mod.rs and service.rs
* Implement the `use_route` fn. It panics if called outside a Router { } (I
think). I think that makes sense.
* Add a `current_location` method to `RouterService` that returns the current
location. I needed this both for the `UseRoute` implementation and _also_ so I
could get at this in my webapp code. I think having some way to get this will
be useful for others, whether or not this exact API is used. In my case, I
want to compare the current path to the `to` path of a `Link` so I can use a
different class for that `Link` if it is the currently active page.
Routing for Dioxus App
DioxusRouter adds React-Router style routing to your Dioxus apps. Works in browser, SSR, and natively.
fn app() {
cx.render(rsx! {
Routes {
Route { to: "/", Component {} },
Route { to: "/blog", Blog {} },
Route { to: "/blog/:id", BlogPost {} },
}
})
}
Then, in your route, you can choose to parse the Route any way you want through use_route.
let id: usize = use_route(&cx).path("id")?;
let state: CustomState = use_route(&cx).parse()?;
Adding links into your app:
Link { to: "id/{id}" }
Currently, the router is only supported in a web environment, but we plan to add 1st-party support via the context API when new renderers are available.