Bläddra i källkod

fix: dont clone callbacks

Jonathan Kelley 2 år sedan
förälder
incheckning
3faef30075
1 ändrade filer med 20 tillägg och 7 borttagningar
  1. 20 7
      packages/core/src/create.rs

+ 20 - 7
packages/core/src/create.rs

@@ -210,14 +210,27 @@ impl<'b> VirtualDom {
         // }
 
         // Safety: we promise not to re-alias this text later on after committing it to the mutation
-        let unbounded_value = unsafe { std::mem::transmute(attribute.value.clone()) };
 
-        self.mutations.push(SetAttribute {
-            name: unbounded_name,
-            value: unbounded_value,
-            ns: attribute.namespace,
-            id,
-        });
+        match &attribute.value {
+            AttributeValue::Listener(_) => {
+                self.mutations.push(NewEventListener {
+                    // all listeners start with "on"
+                    name: &unbounded_name[2..],
+                    id,
+                })
+            }
+            _ => {
+                // Safety: we promise not to re-alias this text later on after committing it to the mutation
+                let unbounded_value = unsafe { std::mem::transmute(attribute.value.clone()) };
+
+                self.mutations.push(SetAttribute {
+                    name: unbounded_name,
+                    value: unbounded_value,
+                    ns: attribute.namespace,
+                    id,
+                })
+            }
+        }
     }
 
     fn load_template_root(&mut self, template: &VNode, root_idx: usize) -> ElementId {