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}