#![allow(non_snake_case)] use std::collections::HashMap; use dioxus::prelude::*; fn main() { dioxus_desktop::launch(App); } #[derive(Default)] struct CoolData { data: HashMap, } impl CoolData { pub fn new(data: HashMap) -> Self { Self { data } } pub fn view(&self, id: &usize) -> Option<&String> { self.data.get(id) } pub fn set(&mut self, id: usize, data: String) { self.data.insert(id, data); } } #[rustfmt::skip] pub fn App(cx: Scope) -> Element { use_shared_state_provider(cx, || CoolData::new(HashMap::from([ (0, "Hello, World!".to_string()), (1, "Dioxus is amazing!".to_string()) ]))); render!( DataEditor { id: 0 } DataEditor { id: 1 } DataView { id: 0 } DataView { id: 1 } ) } #[inline_props] fn DataEditor(cx: Scope, id: usize) -> Element { let cool_data = use_shared_state::(cx).unwrap().read(); let my_data = &cool_data.view(id).unwrap(); render!(p { "{my_data}" }) } #[inline_props] fn DataView(cx: Scope, id: usize) -> Element { let cool_data = use_shared_state::(cx).unwrap(); let oninput = |e: FormEvent| cool_data.write().set(*id, e.value.clone()); let cool_data = cool_data.read(); let my_data = &cool_data.view(id).unwrap(); render!(input { oninput: oninput, value: "{my_data}" }) }