diff --git a/examples/text_box.rs b/examples/text_box.rs
index 6c1b71b3e4c03ae83c4f3a4c64730f3b40f6397e..3c24ec7ab84af8ccae643b5f99c08459092a48ea 100644
--- a/examples/text_box.rs
+++ b/examples/text_box.rs
@@ -4,6 +4,7 @@ use bevy::{
     DefaultPlugins,
 };
 use kayak_core::Color;
+use kayak_render_macros::use_state;
 use kayak_ui::bevy::{BevyContext, BevyKayakUIPlugin, FontMapping, UICameraBundle};
 use kayak_ui::core::{
     render, rsx,
@@ -14,13 +15,9 @@ use kayak_ui::widgets::{App, OnChange, TextBox, Window};
 
 #[widget]
 fn TextBoxExample(context: &mut KayakContext) {
-    let value = context
-        .create_state("I started with a value!".to_string())
-        .unwrap();
-    let red_value = context
-        .create_state("This text is red".to_string())
-        .unwrap();
-    let empty_value = context.create_state("".to_string()).unwrap();
+    let (value, set_value, _) = use_state!("I started with a value!".to_string());
+    let (empty_value, set_empty_value, _) = use_state!("".to_string());
+    let (red_value, set_red_value, _) = use_state!("This text is red".to_string());
 
     let input_styles = Style {
         top: StyleProp::Value(Units::Pixels(10.0)),
@@ -32,34 +29,28 @@ fn TextBoxExample(context: &mut KayakContext) {
         ..input_styles.clone()
     };
 
-    let cloned_value = value.clone();
     let on_change = OnChange::new(move |event| {
-        cloned_value.set(event.value);
+        set_value(event.value);
     });
 
-    let cloned_value2 = empty_value.clone();
-    let on_change2 = OnChange::new(move |event| {
-        cloned_value2.set(event.value);
+    let on_change_empty = OnChange::new(move |event| {
+        set_empty_value(event.value);
     });
 
-    let cloned_red_value = red_value.clone();
     let on_change_red = OnChange::new(move |event| {
-        cloned_red_value.set(event.value);
+        set_red_value(event.value);
     });
 
-    let current_value = value.get();
-    let current_value2 = empty_value.get();
-    let current_red_value = red_value.get();
     rsx! {
         <Window position={(50.0, 50.0)} size={(300.0, 300.0)} title={"TextBox Example".to_string()}>
-            <TextBox styles={Some(input_styles)} value={current_value} on_change={Some(on_change)} />
+            <TextBox styles={Some(input_styles)} value={value} on_change={Some(on_change)} />
             <TextBox
                 styles={Some(input_styles)}
-                value={current_value2}
-                on_change={Some(on_change2)}
+                value={empty_value}
+                on_change={Some(on_change_empty)}
                 placeholder={Some("This is a placeholder".to_string())}
             />
-            <TextBox styles={Some(red_text_styles)} value={current_red_value} on_change={Some(on_change_red)} />
+            <TextBox styles={Some(red_text_styles)} value={red_value} on_change={Some(on_change_red)} />
         </Window>
     }
 }