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