1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
use ;
use Duration;
/// The interface to a debounce.
///
/// You can cancel an interval with [`UseInterval::cancel`].
/// See [`use_interval`] for more information.
/// Repeatedly call a function at a specific interval.
///
/// Intervals are cancelable with the [`UseInterval::cancel`] method.
///
/// # Examples
///
/// Example of using an interval:
/// ```rust
/// use dioxus::prelude::*;
/// use dioxus_sdk_time::use_interval;
/// use std::time::Duration;
///
/// #[component]
/// fn App() -> Element {
/// let mut time_elapsed = use_signal(|| 0);
/// // Create an interval that increases the time elapsed signal by one every second.
/// use_interval(Duration::from_secs(1), move |()| time_elapsed += 1);
///
/// rsx! {
/// "It has been {time_elapsed} since the app started."
/// }
/// }
/// ```
///
/// #### Cancelling Intervals
/// Example of cancelling an interval:
/// ```rust
/// use dioxus::prelude::*;
/// use dioxus_sdk_time::use_interval;
/// use std::time::Duration;
///
/// #[component]
/// fn App() -> Element {
/// let mut time_elapsed = use_signal(|| 0);
/// let mut interval = use_interval(Duration::from_secs(1), move |()| time_elapsed += 1);
///
/// rsx! {
/// "It has been {time_elapsed} since the app started."
/// button {
/// // Cancel the interval when the button is clicked.
/// onclick: move |_| interval.cancel(),
/// "Cancel Interval"
/// }
/// }
/// }
/// ```
///
/// #### Async Intervals
/// Intervals can accept an async callback:
/// ```rust
/// use dioxus::prelude::*;
/// use dioxus_sdk_time::use_interval;
/// use std::time::Duration;
///
/// #[component]
/// fn App() -> Element {
/// let mut time_elapsed = use_signal(|| 0);
/// // Create an interval that increases the time elapsed signal by one every second.
/// use_interval(Duration::from_secs(1), move |()| async move {
/// time_elapsed += 1;
/// // Pretend we're doing some async work.
/// tokio::time::sleep(Duration::from_secs(1)).await;
/// println!("Done!");
/// });
///
/// rsx! {
/// "It has been {time_elapsed} since the app started."
/// }
/// }
/// ```
+ 'static,
)