yew_hooks/hooks/use_hovered.rs
1use yew::prelude::*;
2
3use super::use_event;
4
5/// A sensor hook that tracks whether HTML element is being hovered.
6///
7/// # Example
8///
9/// ```rust
10/// # use yew::prelude::*;
11/// #
12/// use yew_hooks::prelude::*;
13///
14/// #[function_component(UseHovered)]
15/// fn hovered() -> Html {
16/// let node = use_node_ref();
17/// let state = use_hovered(node.clone());
18///
19/// html! {
20/// <div ref={node}>
21/// <b>{ " Hovered: " }</b>
22/// { state }
23/// </div>
24/// }
25/// }
26/// ```
27#[hook]
28pub fn use_hovered(node: NodeRef) -> bool {
29 let state = use_state_eq(|| false);
30
31 {
32 let state = state.clone();
33 let node = node.clone();
34 use_event(node, "mouseover", move |_: Event| {
35 state.set(true);
36 });
37 }
38
39 {
40 let state = state.clone();
41 use_event(node, "mouseout", move |_: Event| {
42 state.set(false);
43 });
44 }
45
46 *state
47}