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 相关文章推荐
JS 强制设为首页的代码
Jan 31 Javascript
javascript 内存回收机制理解
Jan 17 Javascript
在JavaScript中typeof的用途介绍
Apr 11 Javascript
jQuery$命名冲突怎么办如何解决
Jan 16 Javascript
javascipt:filter过滤介绍及使用
Sep 10 Javascript
jQuery中queue()方法用法实例
Dec 29 Javascript
javascript实现起伏的水波背景效果
May 16 Javascript
[原创]JavaScript语法高亮插件highlight.js用法详解【附highlight.js本站下载】
Nov 01 Javascript
JavaScript实现垂直向上无缝滚动特效代码
Nov 23 Javascript
基于vue实现swipe分页组件实例
May 25 Javascript
JS散列表碰撞处理、开链法、HashTable散列示例
Feb 08 Javascript
Vue快速实现通用表单验证功能
Dec 05 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 mysql Errcode: 28 终极解决方法
2009/07/01 PHP
《PHP编程最快明白》第七讲:php图片验证码与缩略图
2010/11/01 PHP
PHP strtotime函数用法、实现原理和源码分析
2015/02/04 PHP
php和editplus正则表达式去除空白行
2015/04/17 PHP
phpcms的分类名称和类别名称的调用
2017/01/05 PHP
PHP递归实现汉诺塔问题的方法示例
2017/11/25 PHP
PHP7如何开启Opcode打造强悍性能详解
2018/05/11 PHP
Yaf框架封装的MySQL数据库操作示例
2019/03/06 PHP
原创javascript小游戏实现代码
2010/08/19 Javascript
键盘上一张下一张兼容IE/google/firefox等浏览器
2014/01/28 Javascript
jquery操作angularjs对象
2015/06/26 Javascript
js+css实现文字散开重组动画特效代码分享
2015/08/21 Javascript
AngularJS在IE8的不支持的解决方法
2016/05/13 Javascript
jQuery搜索框效果实现代码(百度关键词联想)
2021/02/25 Javascript
JS检测window.open打开的窗口是否关闭
2017/06/25 Javascript
JS简单实现点击跳转登陆邮箱功能的方法
2017/10/31 Javascript
vue-baidu-map 进入页面自动定位的解决方案(推荐)
2018/04/28 Javascript
基于Vue 2.0 监听文本框内容变化及ref的使用说明介绍
2018/08/24 Javascript
JS函数本身的作用域实例分析
2020/03/16 Javascript
如何在 Vue 表单中处理图片
2021/01/26 Vue.js
[28:57]EG vs VGJ.T 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/16 DOTA
Python异常处理总结
2014/08/15 Python
Linux 下 Python 实现按任意键退出的实现方法
2016/09/25 Python
ubuntu系统下使用pm2设置nodejs开机自启动的方法
2018/05/12 NodeJs
django 数据库连接模块解析及简单长连接改造方法
2019/08/29 Python
python tkinter组件摆放方式详解
2019/09/16 Python
使用TensorFlow-Slim进行图像分类的实现
2019/12/31 Python
python3.6使用SMTP协议发送邮件
2020/05/20 Python
css3+jq创作含苞待放的荷花
2014/02/20 HTML / CSS
铭宣海淘转运:美国、日本、英国转运等全球转运公司
2019/09/10 全球购物
通信工程毕业生求职信
2013/11/16 职场文书
物流管理专业应届生求职信
2013/11/21 职场文书
心理健康活动总结
2014/04/30 职场文书
干部选拔任用方案
2014/05/26 职场文书
应届生个人的求职(自荐信范文2篇)
2019/08/23 职场文书
win10电脑关机快捷键是哪个 win10快速关机的几种方法
2022/08/14 数码科技