This commit is contained in:
Evan Almloff committed 2023-06-02 12:33:47 -05:00
1 parent 577f99e68c
commit a9307e57e6
23 files changed
+160 -164

No files matched your search

+42 -32
View File
@@ -6,7 +6,6 @@ use dioxus_router::prelude::*;
fn main() {
simple_logger::SimpleLogger::new()
.with_level(log::LevelFilter::Debug)
.with_module_level("dioxus_router", log::LevelFilter::Trace)
.with_module_level("dioxus", log::LevelFilter::Trace)
.init()
.unwrap();
@@ -14,58 +13,69 @@ fn main() {
}
fn app(cx: Scope) -> Element {
use_router(cx, &RouterConfiguration::default, &|| {
Segment::content(comp(Home))
.fixed(
"blog",
Route::empty().nested(
Segment::content(comp(BlogList)).catch_all((comp(BlogPost), PostId {})),
),
)
.fixed("oranges", comp(Oranges))
.fixed("apples", "/oranges")
});
render! {
h1 { "Your app here" }
ul {
li { Link { target: "/", "home" } }
li { Link { target: "/blog", "blog" } }
li { Link { target: "/blog/tim", "tims' blog" } }
li { Link { target: "/blog/bill", "bills' blog" } }
li { Link { target: "/blog/james", "james amazing' blog" } }
li { Link { target: "/apples", "go to apples" } }
}
Outlet { }
Router {}
}
}
#[derive(Routable, Clone)]
#[rustfmt::skip]
enum Route {
#[layout(NavBar)]
#[route("/")]
Home {},
#[nest("/new")]
#[route("/")]
BlogList {},
#[route("/:post")]
BlogPost {
post: String,
},
#[end_nest]
#[route("/oranges")]
Oranges {},
}
#[inline_props]
fn NavBar(cx: Scope) -> Element {
render! {
h1 { "Your app here" }
ul {
li { Link { target: Route::Home {}, "home" } }
li { Link { target: Route::BlogList {}, "blog" } }
li { Link { target: Route::BlogPost { post: "tim".into() }, "tims' blog" } }
li { Link { target: Route::BlogPost { post: "bill".into() }, "bills' blog" } }
li { Link { target: Route::BlogPost { post: "james".into() }, "james amazing' blog" } }
}
Outlet {}
}
}
#[inline_props]
fn Home(cx: Scope) -> Element {
log::debug!("rendering home {:?}", cx.scope_id());
render! { h1 { "Home" } }
}
#[inline_props]
fn BlogList(cx: Scope) -> Element {
log::debug!("rendering blog list {:?}", cx.scope_id());
render! { div { "Blog List" } }
}
struct PostId;
fn BlogPost(cx: Scope) -> Element {
let Some(id) = use_route(cx)?.parameter::<PostId>() else {
return render!(div { "No blog post id" });
};
log::debug!("rendering blog post {}", id);
#[inline_props]
fn BlogPost(cx: Scope, post: String) -> Element {
log::debug!("rendering blog post {}", post);
render! {
div {
h3 { "blog post: {id:?}" }
Link { target: "/blog/", "back to blog list" }
h3 { "blog post: {post}" }
Link { target: Route::BlogList {}, "back to blog list" }
}
}
}
#[inline_props]
fn Oranges(cx: Scope) -> Element {
render!("Oranges are not apples!")
}