pub struct Emitter<Event>(/* private fields */);Expand description
Event emitter that can be embedded in Props.
Clone this handle to create callbacks in your Props that can trigger events when invoked (e.g., by user interaction).
Emitter uses interior mutability via Arc<Mutex<...>>, making it
cheap to clone (just an atomic reference count increment) and thread-safe.
§Example
use oxide_mvu::{Emitter, MvuLogic, Effect};
enum Event { Click }
#[derive(Clone)]
struct Model { clicks: u32 }
struct Props {
clicks: u32,
on_click: Box<dyn Fn()>,
}
struct MyApp;
impl MvuLogic<Event, Model, Props> for MyApp {
fn init(&self, model: Model) -> (Model, Effect<Event>) {
(model, Effect::none())
}
fn update(&self, event: Event, model: &Model) -> (Model, Effect<Event>) {
match event {
Event::Click => {
let new_model = Model {
clicks: model.clicks + 1,
..model.clone()
};
(new_model, Effect::none())
}
}
}
fn view(&self, model: &Model, emitter: &Emitter<Event>) -> Props {
let emitter = emitter.clone();
Props {
clicks: model.clicks,
on_click: Box::new(move || {
emitter.emit(Event::Click);
}),
}
}
}Implementations§
Trait Implementations§
Auto Trait Implementations§
impl<Event> Freeze for Emitter<Event>
impl<Event> !RefUnwindSafe for Emitter<Event>
impl<Event> Send for Emitter<Event>
impl<Event> Sync for Emitter<Event>
impl<Event> Unpin for Emitter<Event>
impl<Event> !UnwindSafe for Emitter<Event>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more