我正在创建一个本机应用程序,但是我需要使用目标C来构建我的自定义UIView。但是问题在于该UIView需要显示反应内容。例如反应文本输入和按钮。我正在考虑向自定义UIView添加RCTRootView(将具有这些React组件),从而解决问题。但是我目前正在使用一个RCTRootView。我如何创建另一个并在我的代码中使用它。

编辑:
我确实知道我们可以从服务器how-to-rename-react-native-entry-file-index-ios-js添加不同的捆绑包,但是当我在本地运行时如何使用它。

jsCodeLocation = [[NSBundle mainBundle] URLForResource:@"main" withExtension:@"jsbundle"];

最佳答案

与创建其他UIView一样,创建另一个RCTRootView。

RCTRootView *someRootView = [[RCTRootView alloc] initWithBundleURL:someJsCodeLocation
                                                        moduleName:@"SomeRootComponent"
                                                     launchOptions:nil];

RCTRootView *anotherRootView = [[RCTRootView alloc] initWithBundleURL:anotherJsCodeLocation
                                                           moduleName:@"AnotherRootComponent"
                                                        launchOptions:nil];


您可以为所有RCTRootView指定相同的包(jsCodeLocation),也可以为每个RCTRootView指定不同的包。无论哪种情况,最好的做法都是使用不同的组件名称(moduleName):

AppRegistry.registerComponent('SomeRootComponent', () => SomeRootComponent);

AppRegistry.registerComponent('AnotherRootComponent', () => AnotherRootComponent);


如果您想维护多个包,则需要使用以下命令对其进行编译:

curl 'http://localhost:8082/index1.ios.bundle?dev=false&minify=true' -o iOS/main1.jsbundle

curl 'http://localhost:8082/index2.ios.bundle?dev=false&minify=true' -o iOS/main2.jsbundle


然后可以将main1.jsbundle和main2.jsbundle添加到您的项目中并正常引用。

09-17 16:43