Bladeren bron

Fix spread props diffing (#2679)

* Fix spread props diffing

* Add a regression test for extends prop diffing
Evan Almloff 11 maanden geleden
bovenliggende
commit
ea3d88c1dd
2 gewijzigde bestanden met toevoegingen van 30 en 0 verwijderingen
  1. 1 0
      packages/core-macro/src/props/mod.rs
  2. 29 0
      packages/core-macro/tests/values_memoize_in_place.rs

+ 1 - 0
packages/core-macro/src/props/mod.rs

@@ -640,6 +640,7 @@ mod struct_info {
 
             let regular_fields: Vec<_> = self
                 .included_fields()
+                .chain(self.extend_fields())
                 .filter(|f| !looks_like_signal_type(f.ty) && !looks_like_callback_type(f.ty))
                 .map(|f| {
                     let name = f.name;

+ 29 - 0
packages/core-macro/tests/values_memoize_in_place.rs

@@ -134,3 +134,32 @@ fn TakesSignal(sig: ReadOnlySignal<usize>, number: usize) -> Element {
         button { "{number}" }
     }
 }
+
+// Regression test for https://github.com/DioxusLabs/dioxus/issues/2582
+#[test]
+fn spreads_memorize_in_place() {
+    #[derive(Props, Clone, PartialEq)]
+    struct CompProps {
+        #[props(extends = GlobalAttributes)]
+        attributes: Vec<Attribute>,
+    }
+
+    let mut props = CompProps::builder().build();
+    assert!(!props.memoize(&CompProps::builder().all("123").build()));
+    assert_eq!(
+        props.attributes,
+        vec![Attribute::new("all", "123", Some("style"), false)]
+    );
+
+    assert!(!props.memoize(&CompProps::builder().width("123").build()));
+    assert_eq!(
+        props.attributes,
+        vec![Attribute::new("width", "123", Some("style"), false)]
+    );
+
+    assert!(!props.memoize(&CompProps::builder().build()));
+    assert_eq!(props.attributes, vec![]);
+
+    assert!(props.memoize(&CompProps::builder().build()));
+    assert_eq!(props.attributes, vec![]);
+}