diff --git a/packages/react-native/ReactCommon/react/renderer/componentregistry/ComponentDescriptorProvider.h b/packages/react-native/ReactCommon/react/renderer/componentregistry/ComponentDescriptorProvider.h index f1e6c7a4010f..6c479dbeef45 100644 --- a/packages/react-native/ReactCommon/react/renderer/componentregistry/ComponentDescriptorProvider.h +++ b/packages/react-native/ReactCommon/react/renderer/componentregistry/ComponentDescriptorProvider.h @@ -18,7 +18,8 @@ namespace facebook::react { * constructor. The callable returns a unique pointer conveniently represents an * abstract type and ownership of the newly created object. */ -using ComponentDescriptorConstructor = ComponentDescriptor::Unique(const ComponentDescriptorParameters ¶meters); +using ComponentDescriptorConstructor = + std::function; /* * Represents a unified way to construct an instance of a particular stored @@ -35,7 +36,7 @@ class ComponentDescriptorProvider final { ComponentHandle handle; ComponentName name; ComponentDescriptor::Flavor flavor; - ComponentDescriptorConstructor *constructor; + ComponentDescriptorConstructor constructor; }; /* diff --git a/packages/react-native/ReactCommon/react/renderer/componentregistry/ComponentDescriptorRegistry.cpp b/packages/react-native/ReactCommon/react/renderer/componentregistry/ComponentDescriptorRegistry.cpp index 4838b3b6013e..a80a5194e2ce 100644 --- a/packages/react-native/ReactCommon/react/renderer/componentregistry/ComponentDescriptorRegistry.cpp +++ b/packages/react-native/ReactCommon/react/renderer/componentregistry/ComponentDescriptorRegistry.cpp @@ -32,10 +32,11 @@ void ComponentDescriptorRegistry::add( const ComponentDescriptorProvider& componentDescriptorProvider) const { std::unique_lock lock(mutex_); - auto componentDescriptor = componentDescriptorProvider.constructor( - {.eventDispatcher = parameters_.eventDispatcher, - .contextContainer = parameters_.contextContainer, - .flavor = componentDescriptorProvider.flavor}); + auto args = ComponentDescriptorParameters{ + .eventDispatcher = parameters_.eventDispatcher, + .contextContainer = parameters_.contextContainer, + .flavor = componentDescriptorProvider.flavor}; + auto componentDescriptor = componentDescriptorProvider.constructor(args); react_native_assert( componentDescriptor->getComponentHandle() == componentDescriptorProvider.handle); @@ -45,6 +46,7 @@ void ComponentDescriptorRegistry::add( auto sharedComponentDescriptor = std::shared_ptr( std::move(componentDescriptor)); + _registryByHandle[componentDescriptorProvider.handle] = sharedComponentDescriptor; _registryByName[componentDescriptorProvider.name] = sharedComponentDescriptor;