ReactNative | 混合多个ReactNative项目的思考
混合多个ReactNative项目的尝试[iOS]
此文建议有一定ReactNative基础和iOS开发基础之后再阅读
1 | 起因:<br>公司需要在一个平台类的RN项目中,通过跳转打开另外一个RN项目,但是并不想另外一个RN项目出现在手机桌面上, |
在RN的iOS项目中,在AppDelegate.m中,是通过这样的代码启用RN模块的:
1 | NSURL *jsCodeLocation = [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index.ios" fallbackResource:nil]; |
可见,通过”index.ios”找到工程项目中指定的启动ReactNative的js文件,然后通过moduleName拿到在启动文件中注册的module信息 在index.ios.js中通过这样的代码来注册moduleName:
1 | AppRegistry.registerComponent('test', () => test); |
就是说,如果这里不禁止同时注册多个的话,是可以在iOS原生代码中进行切换不同moduleName的ReactNative项目的, 所以,在此注册多个:
1 | AppRegistry.registerComponent('test', () => test); |
然后把AppDelegate.m中启动ReactNative项目的代码拿到新的ViewController中,指定当前ViewController.view = rootView
在这个ViewController中,随便写一个跳转新ViewController方法作为事件响应,跳转后也用同样的方法:
1 | NSURL *jsCodeLocation = [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index.ios" fallbackResource:nil]; |