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 反科里化 this [译]
Sep 20 Javascript
JS getAttribute和setAttribute(取得和设置属性)的使用介绍
Jul 10 Javascript
jquery购物车实时结算特效实现思路
Sep 23 Javascript
Node.js中创建和管理外部进程详解
Aug 16 Javascript
Document.body.scrollTop的值总为零的快速解决办法
Jun 09 Javascript
js 中获取制定的cook信息实现方法
Nov 19 Javascript
搭建Bootstrap离线文档的方法
Dec 02 Javascript
详解vue-cli之webpack3构建全面提速优化
Dec 25 Javascript
JS基于封装函数实现的表格分页完整示例
Jun 26 Javascript
深入理解vue中的slot与slot-scope
Apr 22 Javascript
uni app仿微信顶部导航条功能
Sep 17 Javascript
vue 父组件通过v-model接收子组件的值的代码
Oct 27 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
ThinkPHP中实例Model方法的区别说明
2010/08/21 PHP
解析PHP中ob_start()函数的用法
2013/06/24 PHP
thinkphp中session和cookie无效的解决方法
2014/12/19 PHP
php实现cookie加密的方法
2015/03/10 PHP
php+js实现的无刷新下载文件功能示例
2019/08/23 PHP
JavaScript 权威指南(第四版) 读书笔记
2009/08/11 Javascript
基于JQuery的Select选择框的华丽变身
2011/08/23 Javascript
JS对话框_JS模态对话框showModalDialog用法总结
2014/01/11 Javascript
扩展jQuery对象时如何扩展成员变量具体怎么实现
2014/04/25 Javascript
js数组依据下标删除元素
2015/04/14 Javascript
text-align:justify实现文本两端对齐 兼容IE
2015/08/19 Javascript
jquery+php随机生成红包金额数量代码分享
2015/08/27 Javascript
检查表单元素的值是否为空的实例代码
2016/06/16 Javascript
Angularjs---项目搭建图文教程
2016/07/08 Javascript
javascript实现用户点击数量统计
2016/12/25 Javascript
Bootstrap3 内联单选和多选框
2016/12/29 Javascript
js实现tab切换效果
2017/02/16 Javascript
在iFrame子页面里实现模态框的方法
2018/08/17 Javascript
微信小程序Echarts覆盖正常组件问题解决
2019/07/13 Javascript
JavaScript canvas动画实现时钟效果
2020/02/10 Javascript
vue 验证两次输入的密码是否一致的方法示例
2020/09/29 Javascript
原生js实现点击按钮复制内容到剪切板
2020/11/19 Javascript
[03:54]DOTA2英雄梦之声_第06期_昆卡
2014/06/23 DOTA
Python采用Django制作简易的知乎日报API
2016/08/03 Python
Python实现动态图解析、合成与倒放
2018/01/18 Python
python绘制简单彩虹图
2018/11/19 Python
python实现批量修改服务器密码的方法
2019/08/13 Python
使用python无账号无限制获取企查查信息的实例代码
2020/04/17 Python
李维斯德国官方网上商店:Levi’s德国
2016/09/10 全球购物
2014年个人债务授权委托书范本
2014/09/22 职场文书
党的群众路线教育实践活动查摆问题及整改措施
2014/10/10 职场文书
群众路线教育实践活动学习笔记内容
2014/11/06 职场文书
给老师的感谢信
2015/01/20 职场文书
终止解除劳动合同证明书
2015/06/17 职场文书
2015年小学生国庆节演讲稿
2015/07/30 职场文书
Filebeat 采集 Nginx 日志的方法
2021/03/31 Servers