yew_hooks/hooks/
use_is_mounted.rs

1use std::rc::Rc;
2
3use yew::prelude::*;
4
5use super::use_effect_once;
6
7/// A hook returns true if component is mounted and false otherwise.
8///
9/// # Example
10///
11/// ```rust
12/// # use yew::prelude::*;
13/// #
14/// use yew_hooks::prelude::*;
15///
16/// #[function_component(IsMounted)]
17/// fn is_mounted() -> Html {
18///     let is_mounted = use_is_mounted();
19///     
20///     html! {
21///         <>
22///             { is_mounted() }
23///         </>
24///     }
25/// }
26/// ```
27#[hook]
28pub fn use_is_mounted() -> Rc<dyn Fn() -> bool> {
29    let is_mounted = use_mut_ref(|| false);
30
31    {
32        let is_mounted = is_mounted.clone();
33
34        use_effect_once(move || {
35            *is_mounted.borrow_mut() = true;
36
37            move || *is_mounted.borrow_mut() = false
38        });
39    }
40
41    Rc::new(move || {
42        let is_mounted = *is_mounted.borrow();
43        is_mounted
44    })
45}