React Native 混合开发多入口加载方式详解


Posted in Javascript onSeptember 23, 2019

在已有app混合开发时,可能会有多个rn界面入口的需求,这个时候我们可以使用RCTRootView中的moduleName或initialProperties来实现加载包中的不同页面。

目前使用RCTRootView有两种方式:

  • 使用initialProperties传入props属性,在React中读取属性,通过逻辑来渲染不同的Component
  • 配置moduleName,然后AppRegistry.registerComponent注册同名的页面入口

这里贴出使用0.60.5版本中ios项目的代码片段:

- (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;
}

initialProperties

这种方式简单使用可以通过state判断切换界面,不过项目使用中还是需要react-navigation这样的导航组件搭配使用,下面贴出的代码就是结合路由的实现方案。

screenProps是react-navigation中专门用于传递给React组件数据的属性,createAppContainer创建的组件接受该参数screenProps,并传给访问的路由页面。

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

我们按照下面代码注册多个页面入口之后,就可以在原生代码中指定moduleName等于AwesomeProject或者AwesomeProject2来加载不同页面。

AppRegistry.registerComponent("AwesomeProject", () => App);
AppRegistry.registerComponent("AwesomeProject2", () => App2);

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript静态页面传值的三种方法分享
Nov 12 Javascript
javascript 数组排序函数sort和reverse使用介绍
Nov 21 Javascript
jquery使用jxl插件导出excel示例
Apr 14 Javascript
jquery.map()方法的使用详解
Jul 09 Javascript
基于JS代码实现图片在页面中旋转效果
Jun 16 Javascript
JavaScript兼容性总结之获取非行间样式案例
Aug 07 Javascript
jquery自定义表单验证插件
Oct 12 Javascript
vuejs中监听窗口关闭和窗口刷新事件的方法
Sep 21 Javascript
Nuxt升级2.0.0时出现的问题(小结)
Oct 08 Javascript
jquery-ui 进度条功能示例【测试可用】
Jul 25 jQuery
JavaScript中的各种宽高属性的实现
May 08 Javascript
小程序自定义轮播图圆点组件
Jun 25 Javascript
Node.js HTTP服务器中的文件、图片上传的方法
Sep 23 #Javascript
node 文件上传接口的转发的实现
Sep 23 #Javascript
layui 上传文件_批量导入数据UI的方法
Sep 23 #Javascript
Electron 调用命令行(cmd)
Sep 23 #Javascript
layui文件上传控件带更改后数据传值的方法
Sep 23 #Javascript
原生JavaScript实现日历功能代码实例(无引用Jq)
Sep 23 #Javascript
小程序实现上下移动切换位置
Sep 23 #Javascript
You might like
PHP静态新闻列表自动生成代码
2007/06/14 PHP
php 破解防盗链图片函数
2008/12/09 PHP
Ajax+PHP边学边练 之五 图片处理
2009/12/03 PHP
PHP自定义函数收代码
2010/08/01 PHP
php懒人函数 自动添加数据
2011/06/28 PHP
基于empty函数的输出详解
2013/06/17 PHP
php实现通过soap调用.Net的WebService asmx文件
2017/02/27 PHP
PHP实现将标点符号正则替换为空格的方法
2017/08/09 PHP
PHP pthreads v3下的Volatile简介与使用方法示例
2020/02/21 PHP
JavaScript 学习技巧
2010/02/17 Javascript
Jquery优化效率 提升性能解决方案
2010/09/06 Javascript
js数组转json并在后台对其解析具体实现
2013/11/20 Javascript
js代码实现的加入收藏效果并兼容主流浏览器
2014/06/23 Javascript
js事件监听器用法实例详解
2015/06/01 Javascript
JavaScript function函数种类详解
2016/02/22 Javascript
Js获取图片原始宽高的实现代码
2016/05/17 Javascript
JavaScript鼠标特效大全
2016/09/13 Javascript
JS实现的RGB网页颜色在线取色器完整实例
2016/12/21 Javascript
基于javascript的异步编程实例详解
2017/04/10 Javascript
解决JS外部文件中文注释出现乱码问题
2017/07/09 Javascript
微信小程序canvas截取任意形状的实现代码
2020/01/13 Javascript
[01:06:43]完美世界DOTA2联赛PWL S3 PXG vs GXR 第二场 12.19
2020/12/24 DOTA
Python下的subprocess模块的入门指引
2015/04/16 Python
教你用Python脚本快速为iOS10生成图标和截屏
2016/09/22 Python
基于python实现KNN分类算法
2020/04/23 Python
python3.4爬虫demo
2019/01/22 Python
基于python模拟bfs和dfs代码实例
2020/11/19 Python
css3绘制天猫logo实现代码
2012/11/06 HTML / CSS
会计应届生的自荐信
2013/12/13 职场文书
英语专业学生的自我评价
2013/12/30 职场文书
学雷锋志愿服务月活动总结
2014/03/09 职场文书
合作经营协议书范本
2014/09/16 职场文书
2014年六五普法工作总结
2014/11/25 职场文书
2014年学校工会工作总结
2014/12/06 职场文书
PostgreSQL通过oracle_fdw访问Oracle数据的实现步骤
2021/05/21 PostgreSQL
Go语言编译原理之变量捕获
2022/08/05 Golang