Skip to content
Snippets Groups Projects
Commit ec6e2be2 authored by StarArawn's avatar StarArawn
Browse files

Showoff how we use the use_state! macro.

parent 9ab0bdd4
No related branches found
No related tags found
No related merge requests found
......@@ -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()}>
......
......@@ -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>
......
......@@ -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};
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment