diff --git a/React/Base/RCTBridge.m b/React/Base/RCTBridge.m index 4cf32a6c45eb94..a8a79a9456c98e 100644 --- a/React/Base/RCTBridge.m +++ b/React/Base/RCTBridge.m @@ -243,7 +243,11 @@ - (id)moduleForName:(NSString *)moduleName - (id)moduleForClass:(Class)moduleClass { - return [self moduleForName:RCTBridgeModuleNameForClass(moduleClass)]; + id module = [self.batchedBridge moduleForClass:moduleClass]; + if (!module) { + module = [self moduleForName:RCTBridgeModuleNameForClass(moduleClass)]; + } + return module; } - (NSArray *)modulesConformingToProtocol:(Protocol *)protocol diff --git a/React/CxxBridge/RCTCxxBridge.mm b/React/CxxBridge/RCTCxxBridge.mm index a7d3ab9c9b80f5..c5bcb308e02ffb 100644 --- a/React/CxxBridge/RCTCxxBridge.mm +++ b/React/CxxBridge/RCTCxxBridge.mm @@ -444,6 +444,21 @@ - (BOOL)moduleIsInitialized:(Class)moduleClass return _moduleDataByName[RCTBridgeModuleNameForClass(moduleClass)].hasInstance; } +- (id)moduleForClass:(Class)moduleClass +{ + NSString *moduleName = RCTBridgeModuleNameForClass(moduleClass); + RCTModuleData *moduleData = _moduleDataByName[moduleName]; + if (moduleData) { + return moduleData.instance; + } + + // Module may not be loaded yet, so attempt to force load it here. + RCTAssert([moduleClass conformsToProtocol:@protocol(RCTBridgeModule)], @"Asking for a NativeModule that doesn't conform to RCTBridgeModule: %@", NSStringFromClass(moduleClass)); + [self registerAdditionalModuleClasses:@[moduleClass]]; + + return _moduleDataByName[moduleName].instance; +} + - (std::shared_ptr)_buildModuleRegistryUnlocked { if (!self.valid) {