diff --git a/packages/router/src/hooks/use_route.rs b/packages/router/src/hooks/use_route.rs new file mode 100644 index 000000000..1caff8d52 --- /dev/null +++ b/packages/router/src/hooks/use_route.rs @@ -0,0 +1,25 @@ +use async_rwlock::RwLockReadGuard; +use dioxus::{core::Component, prelude::ScopeState}; +use dioxus_router_core::RouterState; +use log::error; + +use crate::utils::use_router_internal::use_router_internal; + +#[must_use] +pub fn use_route<'a>(cx: &'a ScopeState) -> Option>> { + match use_router_internal(cx) { + Some(r) => loop { + if let Some(s) = r.state.try_read() { + break Some(s); + } + }, + None => { + let msg = "`use_route` must have access to a parent router"; + error!("{msg}, will be inactive"); + #[cfg(debug_assertions)] + panic!("{}", msg); + #[cfg(not(debug_assertions))] + None + } + } +} diff --git a/packages/router/src/lib.rs b/packages/router/src/lib.rs index 29d272d92..35c0d2356 100644 --- a/packages/router/src/lib.rs +++ b/packages/router/src/lib.rs @@ -15,6 +15,9 @@ mod contexts { pub mod hooks { mod use_router; pub use use_router::*; + + mod use_route; + pub use use_route::*; } pub mod prelude {