Fix spread props diffing (#2679)

* Fix spread props diffing

* Add a regression test for extends prop diffing
This commit is contained in:
Evan Almloff authored and GitHub committed 2024-07-23 16:57:05 -07:00
1 parent 6148941825
commit ea3d88c1dd
2 files changed
+30

No files matched your search

+1
View File
@@ -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;
@@ -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![]);
}