Fix basic routers

This commit is contained in:
Evan Almloff 2024-01-16 14:39:48 -06:00
parent 918d09b516
commit b58eb04278
6 changed files with 24 additions and 33 deletions

View file

@ -10,7 +10,6 @@ use std::fmt::Display;
use dioxus::prelude::*;
use dioxus_router::prelude::*;
// ANCHOR: route
#[derive(Routable, Clone)]
#[rustfmt::skip]
enum Route {
@ -65,22 +64,22 @@ impl FromQuery for ManualBlogQuerySegments {
#[component]
fn BlogPost(query_params: ManualBlogQuerySegments) -> Element {
rsx! {
div{"This is your blogpost with a query segment:"}
div{ "{query_params:?}" }
div { "This is your blogpost with a query segment:" }
div { "{query_params:?}" }
}
}
#[component]
fn AutomaticBlogPost(name: String, surname: String) -> Element {
rsx! {
div{"This is your blogpost with a query segment:"}
div{ "name={name}&surname={surname}" }
div { "This is your blogpost with a query segment:" }
div { "name={name}&surname={surname}" }
}
}
#[component]
fn App() -> Element {
rsx! { Router::<Route>{} }
rsx! { Router::<Route> {} }
}
fn main() {

View file

@ -5,7 +5,6 @@ fn main() {
launch_desktop(Route::Home {});
}
// ANCHOR: router
#[derive(Routable, Clone)]
#[rustfmt::skip]
enum Route {
@ -30,7 +29,6 @@ enum Route {
route: Vec<String>,
},
}
// ANCHOR_END: router
#[component]
fn NavBar() -> Element {

View file

@ -27,10 +27,7 @@ pub fn try_consume_context<T: 'static + Clone>() -> Option<T> {
pub fn consume_context<T: 'static + Clone>() -> T {
with_current_scope(|cx| cx.consume_context::<T>())
.flatten()
.expect(&format!(
"Could not find context {}",
std::any::type_name::<T>(),
))
.unwrap_or_else(|| panic!("Could not find context {}", std::any::type_name::<T>()))
}
/// Consume context from the current scope

View file

@ -20,7 +20,7 @@ dioxus-rsx = { workspace = true, optional = true }
dioxus-signals = { workspace = true, optional = true }
[features]
default = ["macro", "html", "signals"]
default = ["macro", "html", "signals", "hooks"]
signals = ["dioxus-signals"]
macro = ["dioxus-core-macro", "dioxus-rsx"]
html = ["dioxus-html"]

View file

@ -28,6 +28,7 @@ pub use dioxus_rsx as rsx;
pub use dioxus_core_macro as core_macro;
pub mod prelude {
#[cfg(feature = "launch")]
pub use crate::launch::*;

View file

@ -1,4 +1,4 @@
use dioxus_lib::prelude::ScopeId;
use dioxus_lib::prelude::*;
use crate::prelude::*;
@ -11,26 +11,22 @@ use crate::prelude::*;
/// - [`None`], when the current component isn't a descendant of a [`Link`] component.
/// - Otherwise [`Some`].
pub(crate) fn use_router_internal() -> Option<RouterContext> {
todo!()
let router = use_hook(|| {
let router = consume_context::<RouterContext>();
// let inner = cx.use_hook(|| {
// let router = cx.consume_context::<RouterContext>()?;
let id = current_scope_id().expect("use_router_internal called outside of a component");
router.subscribe(id);
// let id = cx.scope_id();
// router.subscribe(id);
Some(router)
});
// Some(Subscription { router, id })
// });
// cx.use_hook(|| inner.as_ref().map(|s| s.router.clone()))
}
struct Subscription {
router: RouterContext,
id: ScopeId,
}
impl Drop for Subscription {
fn drop(&mut self) {
self.router.unsubscribe(self.id);
}
use_on_destroy(|| {
let router = consume_context::<RouterContext>();
let id = current_scope_id().expect("use_router_internal called outside of a component");
router.unsubscribe(id);
});
router
}