Fix basic routers

This commit is contained in:
Evan Almloff committed 2024-01-16 14:39:48 -06:00
1 parent 918d09b516
commit b58eb04278
6 files changed
+22 -31

No files matched your search

+1 -4
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
+1 -1
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"]
+1
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::*;
@@ -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()))
}
use_on_destroy(|| {
let router = consume_context::<RouterContext>();
struct Subscription {
router: RouterContext,
id: ScopeId,
}
let id = current_scope_id().expect("use_router_internal called outside of a component");
impl Drop for Subscription {
fn drop(&mut self) {
self.router.unsubscribe(self.id);
}
router.unsubscribe(id);
});
router
}