React Native TurboModule初始化失败,native模块未注册?
我在用TurboModule写个原生模块时,JS调用时报错说模块未找到。按照官方文档初始化了Java类并加了@ReactModule注解,但应用启动就崩溃了。错误提示是:TurboModuleRegistry.getEnforcing('MyModule') was not found。
尝试过检查模块类名和导出名称是否一致,确认package路径正确。原生代码里这样注册的:
@ReactModule(name = MyModule.NAME)
public class MyModule extends TurboModule {
public static final String NAME = "MyModule";
// ...
}
JS端这样引入:NativeModules.MyModule.doSomething()。但就是识别不到模块,是不是需要额外配置metro?
public class MyPackage implements ReactPackage {
@Override
public List
return Collections.emptyList();
}
@Override
public @NonNull List
return Collections.emptyList();
}
@Override
public @NonNull List
List
modules.add(new MyModule(reactContext));
return modules;
}
}
然后在MainApplication.java里注册这个package,注意不是addPackage而是靠getPackages()方法返回的列表。如果你用的是expo那种封装过的结构,可能得通过ExpoModulesProvider去注册。metro配置一般不需要动,但记得在babel里加上react-native-turbo的插件。
最后别忘了原生模块的构造函数要带ReactApplicationContext参数,我刚开始就写了个无参构造函数,导致初始化失败还报错信息完全对不上。