单个应用程序中的多个 RCTRootView
Multiple RCTRootView in a single App
我正在创建一个 React 本机应用程序,但我需要使用 objective C 来构建我的自定义 UIView。但问题是这个 UIView 需要显示反应内容。例如反应文本输入和按钮。我正在考虑向自定义 UIView 添加一个 RCTRootView(它将具有这些反应组件),从而解决这个问题。但我目前正在使用一个 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 可以添加到您的项目中并正常引用。
我正在创建一个 React 本机应用程序,但我需要使用 objective C 来构建我的自定义 UIView。但问题是这个 UIView 需要显示反应内容。例如反应文本输入和按钮。我正在考虑向自定义 UIView 添加一个 RCTRootView(它将具有这些反应组件),从而解决这个问题。但我目前正在使用一个 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 可以添加到您的项目中并正常引用。