From c9bc37d79b98448179aa0fbc75062b736b9cf891 Mon Sep 17 00:00:00 2001 From: Jet Li Date: Sat, 22 Feb 2020 22:22:26 +0800 Subject: [PATCH] Undo non-passive state for prevent_default --- src/components/router_link.rs | 89 +++++++++-------------------------- 1 file changed, 22 insertions(+), 67 deletions(-) diff --git a/src/components/router_link.rs b/src/components/router_link.rs index ad272a8..9f29b32 100644 --- a/src/components/router_link.rs +++ b/src/components/router_link.rs @@ -8,14 +8,8 @@ use yew::prelude::*; use super::{Msg, Props}; use crate::RouterState; -use cfg_if::cfg_if; use yew::virtual_dom::VNode; -#[cfg(feature = "web_sys")] -use gloo::events::{EventListener, EventListenerOptions}; -#[cfg(feature = "web_sys")] -use web_sys::HtmlLinkElement; - /// An anchor tag Component that when clicked, will navigate to the provided route. /// /// Alias to RouterAnchor. @@ -28,10 +22,6 @@ pub struct RouterAnchor { link: ComponentLink, router: RouteAgentDispatcher, props: Props, - #[cfg(feature = "web_sys")] - a_ref: NodeRef, - #[cfg(feature = "web_sys")] - a_listener: Option, } impl Component for RouterAnchor { @@ -44,28 +34,7 @@ impl Component for RouterAncho link, router, props, - #[cfg(feature = "web_sys")] - a_ref: NodeRef::default(), - #[cfg(feature = "web_sys")] - a_listener: None, - } - } - - #[cfg(feature = "web_sys")] - fn mounted(&mut self) -> ShouldRender { - if let Some(link) = self.a_ref.try_into::() { - let options = EventListenerOptions::enable_prevent_default(); - let callback = self.link.callback(|_| Msg::Clicked); - - let listener = EventListener::new_with_options(&link, "click", options, move |event| { - event.stop_propagation(); - event.prevent_default(); - callback.emit(()); - }); - self.a_listener = Some(listener); } - - false } fn update(&mut self, msg: Self::Message) -> ShouldRender { @@ -89,44 +58,30 @@ impl Component for RouterAncho let route: Route = Route::from(self.props.route.clone()); let target: &str = route.as_str(); + #[cfg(feature = "std_web")] + let cb = self.link.callback(|event: ClickEvent| { + event.prevent_default(); + Msg::Clicked + }); + #[cfg(feature = "web_sys")] + let cb = self.link.callback(|event: MouseEvent| { + event.prevent_default(); + Msg::Clicked + }); - cfg_if! { - if #[cfg(feature = "std_web")] { - let cb = |x| self.link.callback(x); - - html! { - - { - #[allow(deprecated)] - &self.props.text - } - {self.props.children.iter().collect::()} - + html! { + + { + #[allow(deprecated)] + &self.props.text } - } else if #[cfg(feature = "web_sys")] { - html! { - - { - #[allow(deprecated)] - &self.props.text - } - {self.props.children.iter().collect::()} - - } - } + {self.props.children.iter().collect::()} + } } }