From a7806583b2204a66aabd1f2d55ee23173f08e335 Mon Sep 17 00:00:00 2001 From: Evan Almloff Date: Mon, 2 Dec 2024 13:34:15 -0600 Subject: [PATCH] Fix hot reloading identical event handler closures (#3270) --- packages/rsx-hotreload/src/diff.rs | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/packages/rsx-hotreload/src/diff.rs b/packages/rsx-hotreload/src/diff.rs index f86e2b102..194b26bfd 100644 --- a/packages/rsx-hotreload/src/diff.rs +++ b/packages/rsx-hotreload/src/diff.rs @@ -621,7 +621,20 @@ impl HotReloadResult { // If it isn't a literal, try to find an exact match for the attribute value from the last build _ => { let value_index = self.full_rebuild_state.dynamic_attributes.position(|a| { - !matches!(a.name, AttributeName::Spread(_)) && a.value == attribute.value + // Spread attributes are not hot reloaded + if matches!(a.name, AttributeName::Spread(_)) { + return false; + } + if a.value != attribute.value { + return false; + } + // The type of event handlers is influenced by the event name, so te cannot hot reload between different event + // names + if matches!(a.value, AttributeValue::EventTokens(_)) && a.name != attribute.name + { + return false; + } + true })?; HotReloadAttributeValue::Dynamic(value_index) }