React Native 混合开发多入口加载方式详解
在已有app混合开发时,可能会有多个rn界面入口的需求,这个时候我们可以使用RCTRootView中的moduleName或initialProperties来实现加载包中的不同页面。
目前使用RCTRootView有两种方式:
- 使用initialProperties传入props属性,在React中读取属性,通过逻辑来渲染不同的Component
- 配置moduleName,然后AppRegistry.registerComponent注册同名的页面入口
这里贴出使用0.60.5版本中ios项目的代码片段:
-(BOOL)application:(UIApplication*)applicationdidFinishLaunchingWithOptions:(NSDictionary*)launchOptions { RCTBridge*bridge=[[RCTBridgealloc]initWithDelegate:selflaunchOptions:launchOptions]; RCTRootView*rootView=[[RCTRootViewalloc]initWithBridge:bridge moduleName:@"AwesomeProject" initialProperties:@{ @"screenProps":@{ @"initialRouteName":@"Home", }, }]; rootView.backgroundColor=[[UIColoralloc]initWithRed:1.0fgreen:1.0fblue:1.0falpha:1]; self.window=[[UIWindowalloc]initWithFrame:[UIScreenmainScreen].bounds]; UIViewController*rootViewController=[UIViewControllernew]; rootViewController.view=rootView; self.window.rootViewController=rootViewController; [self.windowmakeKeyAndVisible]; returnYES; }
initialProperties
这种方式简单使用可以通过state判断切换界面,不过项目使用中还是需要react-navigation这样的导航组件搭配使用,下面贴出的代码就是结合路由的实现方案。
screenProps是react-navigation中专门用于传递给React组件数据的属性,createAppContainer创建的组件接受该参数screenProps,并传给访问的路由页面。
classAppextendsReact.Component{ render(){ const{screenProps}=this.props; conststack=createStackNavigator({ Home:{ screen:HomeScreen, }, Chat:{ screen:ChatScreen, }, },{ initialRouteName:screenProps.initialRouteName||'Home', }); constAppContainer=createAppContainer(stack); return(); } }
moduleName
我们按照下面代码注册多个页面入口之后,就可以在原生代码中指定moduleName等于AwesomeProject或者AwesomeProject2来加载不同页面。
AppRegistry.registerComponent("AwesomeProject",()=>App); AppRegistry.registerComponent("AwesomeProject2",()=>App2);
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。