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获取路径设计源码
May 22 Javascript
jQuery学习笔记之jQuery.fn.init()的参数分析
Jun 09 Javascript
jQuery实现的五子棋游戏实例
Jun 13 Javascript
JavaScript文本框脚本编写的注意事项
Jan 25 Javascript
JS实现简单易用的手机端浮动窗口显示效果
Sep 07 Javascript
vue2笔记 — vue-router路由懒加载的实现
Mar 03 Javascript
JavaScript闭包_动力节点Java学院整理
Jun 27 Javascript
JavaScript实现简单生成随机颜色的方法
Sep 21 Javascript
基于twbsPagination.js分页插件使用心得(分享)
Oct 21 Javascript
vue.js实现带日期星期的数字时钟功能示例
Aug 28 Javascript
关于vue-cli 3配置打包优化要点(推荐)
Apr 22 Javascript
Vue3 的响应式和以前有什么区别,Proxy 无敌?
May 20 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
CodeIgniter错误mysql_connect(): No such file or directory解决方法
2014/09/06 PHP
ThinkPHP中session函数详解
2016/09/14 PHP
PHP房贷计算器实例代码,等额本息,等额本金
2017/04/01 PHP
php 处理png图片白色背景色改为透明色的实例代码
2018/12/10 PHP
phpmyadmin在宝塔面板里进不去的解决方案
2020/07/06 PHP
使用CSS3实现字体颜色渐变的实现
2021/03/09 HTML / CSS
基于jquery的划词搜索实现(备忘)
2010/09/14 Javascript
php与js的区别是什么
2013/08/05 Javascript
jquery parent和parents的区别分析
2013/10/02 Javascript
jquery放大镜效果超漂亮噢
2013/11/15 Javascript
JavaScript中常见获取元素的方法汇总
2015/03/04 Javascript
基于javascript制作微信聊天面板
2020/08/09 Javascript
JS实现图片延迟加载并淡入淡出效果的简单方法
2016/08/25 Javascript
浅谈关于iview表单验证的问题
2018/09/29 Javascript
vue项目中定义全局变量、函数的几种方法
2019/11/08 Javascript
Node如何后台数据库使用增删改查功能
2019/11/21 Javascript
vue element-ui读取pdf文件的方法
2019/11/26 Javascript
Vue实现购物车实例代码两则
2020/05/30 Javascript
[49:31]DOTA2-DPC中国联赛 正赛 Elephant vs LBZS BO3 第二场 1月29日
2021/03/11 DOTA
[59:53]DOTA2-DPC中国联赛 正赛 VG vs Elephant BO3 第二场 3月6日
2021/03/11 DOTA
python正则分组的应用
2013/11/10 Python
使用Python脚本和ADB命令实现卸载App
2017/02/10 Python
python3.4下django集成使用xadmin后台的方法
2017/08/15 Python
怎么使用pipenv管理你的python项目
2018/03/12 Python
Python中的二维数组实例(list与numpy.array)
2018/04/13 Python
python3爬取torrent种子链接实例
2020/01/16 Python
Python使用matplotlib绘制圆形代码实例
2020/05/27 Python
CSS3 伪类选择器 nth-child()说明
2010/07/10 HTML / CSS
德国黑胶唱片、街头服装及运动鞋网上商店:HHV
2018/08/24 全球购物
财会自我鉴定范文
2013/12/27 职场文书
大学四年职业生涯规划书范文
2014/01/02 职场文书
20岁生日感言
2014/01/13 职场文书
3.12植树节活动总结2014
2014/03/13 职场文书
幼儿园保育员责任书
2014/07/22 职场文书
公证处委托书
2015/01/28 职场文书
开会通知短信大全
2015/04/20 职场文书