Browse Source

Add a warning when Link it called outside of a Router context

Dave Rolsky 3 years ago
parent
commit
64080588d0
1 changed files with 21 additions and 14 deletions
  1. 21 14
      packages/router/src/components/link.rs

+ 21 - 14
packages/router/src/components/link.rs

@@ -41,18 +41,25 @@ pub struct LinkProps<'a> {
 }
 
 pub fn Link<'a>(cx: Scope<'a, LinkProps<'a>>) -> Element {
-    let service = cx.consume_context::<RouterService>()?;
-    cx.render(rsx! {
-        a {
-            href: "{cx.props.to}",
-            class: format_args!("{}", cx.props.class.unwrap_or("")),
-            id: format_args!("{}", cx.props.id.unwrap_or("")),
-            title: format_args!("{}", cx.props.title.unwrap_or("")),
-
-            prevent_default: "onclick",
-            onclick: move |_| service.push_route(cx.props.to),
-
-            &cx.props.children
-        }
-    })
+    log::debug!("render Link to {}", cx.props.to);
+    if let Some(service) = cx.consume_context::<RouterService>() {
+        return cx.render(rsx! {
+            a {
+                href: "{cx.props.to}",
+                class: format_args!("{}", cx.props.class.unwrap_or("")),
+                id: format_args!("{}", cx.props.id.unwrap_or("")),
+                title: format_args!("{}", cx.props.title.unwrap_or("")),
+
+                prevent_default: "onclick",
+                onclick: move |_| service.push_route(cx.props.to),
+
+                &cx.props.children
+            }
+        });
+    }
+    log::warn!(
+        "Attempted to create a Link to {} outside of a Router context",
+        cx.props.to,
+    );
+    None
 }