浏览代码

add use_route hook

Adrian Wannenmacher 2 年之前
父节点
当前提交
8df588046d
共有 2 个文件被更改,包括 28 次插入0 次删除
  1. 25 0
      packages/router/src/hooks/use_route.rs
  2. 3 0
      packages/router/src/lib.rs

+ 25 - 0
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<RwLockReadGuard<'a, RouterState<Component>>> {
+    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
+        }
+    }
+}

+ 3 - 0
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 {