From ec6e2be2b4eaa00f290f191cd44db33cebcd8b65 Mon Sep 17 00:00:00 2001 From: StarArawn <toasterthegamer@gmail.com> Date: Sat, 18 Dec 2021 08:18:29 -0500 Subject: [PATCH] Showoff how we use the use_state! macro. --- README.md | 13 ++++--------- examples/counter.rs | 12 ++++-------- kayak_core/src/lib.rs | 2 +- 3 files changed, 9 insertions(+), 18 deletions(-) diff --git a/README.md b/README.md index e2dd0de..ff4d998 100644 --- a/README.md +++ b/README.md @@ -88,18 +88,13 @@ Widget's can create their own state and will re-render when that state changes. ```rust #[widget] fn Counter(context: &mut KayakContext) { - let count = context.create_state(0i32).unwrap(); - // Since we move the variable into the closure we need to clone here. - // Similar cost to cloning an Arc - let cloned_count = count.clone(); - let on_event = OnEvent::new(move |context, event| match event.event_type { - EventType::Click => { - cloned_count.set(cloned_count.get() + 1); - } + let (count, set_count) = use_state!(0i32); + let on_event = OnEvent::new(move |_, event| match event.event_type { + EventType::Click => set_count(count + 1), _ => {} }); - let count_text = format!("Current Count: {}", count.get()); + let count_text = format!("Current Count: {}", count); rsx! { <> <Window position={(50.0, 50.0)} size={(300.0, 300.0)} title={"Counter Example".to_string()}> diff --git a/examples/counter.rs b/examples/counter.rs index a443d5c..8df23d6 100644 --- a/examples/counter.rs +++ b/examples/counter.rs @@ -7,7 +7,7 @@ use kayak_ui::bevy::{BevyContext, BevyKayakUIPlugin, FontMapping, UICameraBundle use kayak_ui::core::{ render, rsx, styles::{Style, StyleProp, Units}, - widget, Bound, EventType, Index, MutableBound, OnEvent, + use_state, widget, Bound, EventType, Index, MutableBound, OnEvent, }; use kayak_widgets::{App, Button, Text, Window}; @@ -33,20 +33,16 @@ fn Counter(context: &mut KayakContext) { ..Default::default() }; - let count = context.create_state(0i32).unwrap(); - let cloned_count = count.clone(); + let (count, set_count) = use_state!(0i32); let on_event = OnEvent::new(move |_, event| match event.event_type { - EventType::Click => { - cloned_count.set(cloned_count.get() + 1); - } + EventType::Click => set_count(count + 1), _ => {} }); - let count_value = count.get(); rsx! { <> <Window position={(50.0, 50.0)} size={(300.0, 300.0)} title={"Counter Example".to_string()}> - <Text styles={Some(text_styles)} size={32.0} content={format!("Current Count: {}", count_value).to_string()}>{}</Text> + <Text styles={Some(text_styles)} size={32.0} content={format!("Current Count: {}", count).to_string()}>{}</Text> <Button on_event={Some(on_event)}> <Text styles={Some(button_text_styles)} size={24.0} content={"Count!".to_string()}>{}</Text> </Button> diff --git a/kayak_core/src/lib.rs b/kayak_core/src/lib.rs index cee43bb..9fa9138 100644 --- a/kayak_core/src/lib.rs +++ b/kayak_core/src/lib.rs @@ -26,7 +26,7 @@ pub use event::*; pub use fragment::Fragment; pub use generational_arena::{Arena, Index}; pub use input_event::*; -pub use kayak_render_macros::{constructor, render, rsx, widget}; +pub use kayak_render_macros::{constructor, render, rsx, use_state, widget}; pub use keys::KeyCode; pub use resources::Resources; pub use tree::{Tree, WidgetTree}; -- GitLab