Skip to content

Commit 1f394fa

Browse files
fkgozalifacebook-github-bot
authored andcommitted
iOS: Attempt to load lazy modules when asked from native
Summary: Previously, asking for an instance of NativeModule from the native side gave `nil` if the lazy modules have not been loaded, which is not consistent with the access from JS. This at least attempts to force load the lazy modules when asked from native. p.s. one asks for a module by doing `[bridge moduleForClass:[FooBar class]]`. Reviewed By: spredolac Differential Revision: D12931640 fbshipit-source-id: 15d2dc574067d3386ef921512ce4bc837749dabd
1 parent e02a154 commit 1f394fa

File tree

2 files changed

+20
-1
lines changed

2 files changed

+20
-1
lines changed

React/Base/RCTBridge.m

+5-1
Original file line numberDiff line numberDiff line change
@@ -243,7 +243,11 @@ - (id)moduleForName:(NSString *)moduleName
243243

244244
- (id)moduleForClass:(Class)moduleClass
245245
{
246-
return [self moduleForName:RCTBridgeModuleNameForClass(moduleClass)];
246+
id module = [self.batchedBridge moduleForClass:moduleClass];
247+
if (!module) {
248+
module = [self moduleForName:RCTBridgeModuleNameForClass(moduleClass)];
249+
}
250+
return module;
247251
}
248252

249253
- (NSArray *)modulesConformingToProtocol:(Protocol *)protocol

React/CxxBridge/RCTCxxBridge.mm

+15
Original file line numberDiff line numberDiff line change
@@ -444,6 +444,21 @@ - (BOOL)moduleIsInitialized:(Class)moduleClass
444444
return _moduleDataByName[RCTBridgeModuleNameForClass(moduleClass)].hasInstance;
445445
}
446446

447+
- (id)moduleForClass:(Class)moduleClass
448+
{
449+
NSString *moduleName = RCTBridgeModuleNameForClass(moduleClass);
450+
RCTModuleData *moduleData = _moduleDataByName[moduleName];
451+
if (moduleData) {
452+
return moduleData.instance;
453+
}
454+
455+
// Module may not be loaded yet, so attempt to force load it here.
456+
RCTAssert([moduleClass conformsToProtocol:@protocol(RCTBridgeModule)], @"Asking for a NativeModule that doesn't conform to RCTBridgeModule: %@", NSStringFromClass(moduleClass));
457+
[self registerAdditionalModuleClasses:@[moduleClass]];
458+
459+
return _moduleDataByName[moduleName].instance;
460+
}
461+
447462
- (std::shared_ptr<ModuleRegistry>)_buildModuleRegistryUnlocked
448463
{
449464
if (!self.valid) {

0 commit comments

Comments
 (0)