diff --git a/examples/hot_reload.rs b/examples/hot_reload.rs index 605d90030..37eebc0f0 100644 --- a/examples/hot_reload.rs +++ b/examples/hot_reload.rs @@ -22,7 +22,7 @@ fn app(cx: Scope) -> Element { cx.render(rsx! { div { width: "100%", - height: "100%", + height: "500px", onclick: move |_| { count.modify(|count| *count + 10); }, @@ -34,6 +34,7 @@ fn app(cx: Scope) -> Element { height: "50%", textarea { width: "90%", + key: "1", value: { if rsx_code.get().is_none() { let rsx_text_index: RsxTextIndex = cx.consume_context().unwrap(); diff --git a/packages/rsx_interperter/src/interperter.rs b/packages/rsx_interperter/src/interperter.rs index a84ccb316..d384f3c0b 100644 --- a/packages/rsx_interperter/src/interperter.rs +++ b/packages/rsx_interperter/src/interperter.rs @@ -203,14 +203,29 @@ fn build_node<'a>( } let tag = bump.alloc(el.name.to_string()); if let Some((tag, ns)) = element_to_static_str(tag) { - Some(factory.raw_element( - tag, - ns, - listeners, - attributes.as_slice(), - children.as_slice(), - None, - )) + match el.key { + None => Some(factory.raw_element( + tag, + ns, + listeners, + attributes.as_slice(), + children.as_slice(), + None, + )), + Some(lit) => { + let ifmt: InterperedIfmt = lit.value().parse().unwrap(); + let key = bump.alloc(ifmt.resolve(&ctx.captured)); + + Some(factory.raw_element( + tag, + ns, + listeners, + attributes.as_slice(), + children.as_slice(), + Some(format_args!("{}", key)), + )) + } + } } else { None }