From 6df20ef3f71388acf1462ab891f55a9d9916b02a Mon Sep 17 00:00:00 2001 From: Evan Almloff Date: Wed, 19 Nov 2025 14:33:49 -0600 Subject: [PATCH] Fix default with optional props (#4995) * fix default with optional props * fix core macro tests --- packages/core-macro/src/props/mod.rs | 7 ++++--- packages/core-macro/tests/rsx.rs | 4 ++-- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/packages/core-macro/src/props/mod.rs b/packages/core-macro/src/props/mod.rs index 31b62945c..a13587cd7 100644 --- a/packages/core-macro/src/props/mod.rs +++ b/packages/core-macro/src/props/mod.rs @@ -238,9 +238,10 @@ mod field_info { || !builder_attr.ignore_option && type_from_inside_option(&field.ty).is_some(); if !builder_attr.strip_option && strip_option_auto { builder_attr.strip_option = true; - builder_attr.default = Some( - syn::parse(quote!(::core::default::Default::default()).into()).unwrap(), - ); + // only change the default if it isn't manually set above + builder_attr.default.get_or_insert_with(|| { + syn::parse(quote!(::core::default::Default::default()).into()).unwrap() + }); } Ok(FieldInfo { diff --git a/packages/core-macro/tests/rsx.rs b/packages/core-macro/tests/rsx.rs index f25b1b05b..596864ebd 100644 --- a/packages/core-macro/tests/rsx.rs +++ b/packages/core-macro/tests/rsx.rs @@ -35,13 +35,13 @@ mod test_default_into { pub str_default: String, // Test options - #[props(into, default = Some("abc"))] + #[props(into, default = Some("abc".into()))] pub opt_into_w_default_val: Option, #[props(into, default)] pub opt_into_w_default: Option, - #[props(default = Some("abc"))] + #[props(default = Some("abc".into()))] pub opt_default: Option, // Test no default