在已有app
混合開發時,可能會有多個rn
界面入口的需求,這個時候咱們能夠使用RCTRootView
中的moduleName
或initialProperties
來實現加載包中的不一樣頁面。react
目前使用RCTRootView
有兩種方式:ios
initialProperties
傳入props
屬性,在React
中讀取屬性,經過邏輯來渲染不一樣的Component
moduleName
,而後AppRegistry.registerComponent
註冊同名的頁面入口這裏貼出使用0.60.5
版本中ios
項目的代碼片斷:react-native
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { RCTBridge *bridge = [[RCTBridge alloc] initWithDelegate:self launchOptions:launchOptions]; RCTRootView *rootView = [[RCTRootView alloc] initWithBridge:bridge moduleName:@"AwesomeProject" initialProperties: @{ @"screenProps" : @{ @"initialRouteName" : @"Home", }, }]; rootView.backgroundColor = [[UIColor alloc] initWithRed:1.0f green:1.0f blue:1.0f alpha:1]; self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]; UIViewController *rootViewController = [UIViewController new]; rootViewController.view = rootView; self.window.rootViewController = rootViewController; [self.window makeKeyAndVisible]; return YES; }
這種方式簡單使用能夠經過state
判斷切換界面,不過項目使用中仍是須要react-navigation
這樣的導航組件搭配使用,下面貼出的代碼就是結合路由的實現方案。app
screenProps
是react-navigation
中專門用於傳遞給React
組件數據的屬性,createAppContainer
建立的組件接受該參數screenProps
,並傳給訪問的路由頁面。this
class App extends React.Component { render() { const { screenProps } = this.props; const stack = createStackNavigator({ Home: { screen: HomeScreen, }, Chat: { screen: ChatScreen, }, }, { initialRouteName: screenProps.initialRouteName || 'Home', }); const AppContainer = createAppContainer(stack); return ( <AppContainer screenProps /> ); } }
咱們按照下面代碼註冊多個頁面入口以後,就能夠在原生代碼中指定moduleName
等於AwesomeProject
或者AwesomeProject2
來加載不一樣頁面。code
AppRegistry.registerComponent("AwesomeProject", () => App); AppRegistry.registerComponent("AwesomeProject2", () => App2);
本文同步發表於做者博客: React Native 混合開發多入口加載方式