diff --git a/packages/react-native/ReactCommon/react/renderer/core/PropsMacros.h b/packages/react-native/ReactCommon/react/renderer/core/PropsMacros.h index c3c352526b6..55fe5224dd0 100644 --- a/packages/react-native/ReactCommon/react/renderer/core/PropsMacros.h +++ b/packages/react-native/ReactCommon/react/renderer/core/PropsMacros.h @@ -110,15 +110,19 @@ struct, blockStart, prefix "BlockStart" suffix, rawValue) // Rebuild a type that contains multiple fields from a single field value -#define REBUILD_FIELD_SWITCH_CASE( \ - defaults, rawValue, property, field, fieldName) \ - case CONSTEXPR_RAW_PROPS_KEY_HASH(fieldName): { \ - if ((rawValue).hasValue()) { \ - decltype((defaults).field) res; \ - fromRawValue(context, rawValue, res); \ - (property).field = res; \ - } else { \ - (property).field = (defaults).field; \ - } \ - return; \ +#define REBUILD_FIELD_SWITCH_CASE( \ + defaults, rawValue, property, field, fieldName) \ + case CONSTEXPR_RAW_PROPS_KEY_HASH(fieldName): { \ + if ((rawValue).hasValue()) [[likely]] { \ + try { \ + fromRawValue(context, rawValue, (property).field); \ + } catch (const std::exception& e) { \ + LOG(ERROR) << "Error while converting prop '" << fieldName \ + << "': " << e.what(); \ + (property).field = (defaults).field; \ + } \ + } else { \ + (property).field = (defaults).field; \ + } \ + return; \ }