diff --git a/packages/core-macro/src/props/mod.rs b/packages/core-macro/src/props/mod.rs index 091c71fd8..aa708fe82 100644 --- a/packages/core-macro/src/props/mod.rs +++ b/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; diff --git a/packages/core-macro/tests/values_memoize_in_place.rs b/packages/core-macro/tests/values_memoize_in_place.rs index b40134eb8..974b2d158 100644 --- a/packages/core-macro/tests/values_memoize_in_place.rs +++ b/packages/core-macro/tests/values_memoize_in_place.rs @@ -134,3 +134,32 @@ fn TakesSignal(sig: ReadOnlySignal, 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, + } + + 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![]); +}