Start timer on component mount
use std::rc::Rc; use vertigo::{bind, dom, get_driver, struct_mut::ValueMut, Value}; #[derive(Clone)] pub struct State { pub timer_state: Value<u32>, timer: Rc<ValueMut<bool>>, } impl State { pub fn new() -> State { State { timer_state: Value::new(0), timer: Rc::new(ValueMut::new(false)), } } pub async fn start_timer(self) { // Ignore if already started if self.timer.get() { return; } // Mark start of the timer self.timer.set(true); // Run into timer loop for i in 0..50 { self.timer_state.set(i as u32); get_driver().sleep(20).await; } // Stop the timer self.timer.set(false); } } let state = State::new(); let _ = bind!(state, async move { state.start_timer().await; }); dom! { <div>{state.timer_state}</div> }