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 相关文章推荐
WordPress JQuery处理沙发头像
Jun 22 Javascript
ModelDialog JavaScript模态对话框类代码
Apr 17 Javascript
js修改input的type属性问题探讨
Oct 12 Javascript
转换字符串为json对象的方法详解
Nov 29 Javascript
21个值得收藏的Javascript技巧
Feb 04 Javascript
JavaScript职责链模式概述
Sep 17 Javascript
vue2 前后端分离项目ajax跨域session问题解决方法
Apr 27 Javascript
JavaScript自执行函数和jQuery扩展方法详解
Oct 27 jQuery
JavaScript数组基于交换的排序示例【冒泡排序】
Jul 21 Javascript
基于Three.js实现360度全景图片
Dec 30 Javascript
JS sort排序详细使用方法示例解析
Sep 27 Javascript
vue-cli —— 如何局部修改Element样式
Oct 22 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中session定期自动清理的方法
2015/11/12 PHP
PHP递归获取目录内所有文件的实现方法
2016/11/01 PHP
PHP日志LOG类定义与用法示例
2018/09/06 PHP
Laravel5.5 实现后台管理登录的方法(自定义用户表登录)
2019/09/30 PHP
JavaScript中void(0)的具体含义解释
2007/02/27 Javascript
JQuery从头学起第三讲
2010/07/06 Javascript
html+js实现动态显示本地时间
2013/09/21 Javascript
类似天猫商品详情随浏览器移动的示例代码
2014/02/27 Javascript
javascript动态生成树形菜单的方法
2015/11/14 Javascript
jquery遍历函数siblings()用法实例
2015/12/24 Javascript
AngularJS中的$watch(),$digest()和$apply()区分
2016/04/04 Javascript
javascript实现平滑无缝滚动
2020/08/09 Javascript
JS解决iframe之间通信和自适应高度的问题
2016/08/24 Javascript
ionic由于使用了header和subheader导致被遮挡的问题的两种解决方法
2016/09/22 Javascript
js对字符串进行编码的方法总结(推荐)
2016/11/10 Javascript
使用JS 插件qrcode.js生成二维码功能
2017/02/20 Javascript
React+react-dropzone+node.js实现图片上传的示例代码
2017/08/23 Javascript
EasyUI实现下拉框多选功能
2017/11/07 Javascript
如何基于JavaScript判断图片是否加载完成
2019/12/28 Javascript
vue 在methods中调用mounted的实现操作
2020/08/07 Javascript
Python xlwt设置excel单元格字体及格式
2020/04/18 Python
浅谈Python黑帽子取代netcat
2018/02/10 Python
Python多线程模块Threading用法示例小结
2019/11/09 Python
中国领先的专业演出票务网:永乐票务
2016/08/29 全球购物
日本高端护肤品牌:Tatcha
2016/08/29 全球购物
英国最大的女性服装零售商:Dorothy Perkins
2017/03/30 全球购物
澳大利亚最受欢迎的美发和美容在线商店:Catwalk
2018/12/12 全球购物
Regatta官网:英国最受欢迎的户外服装和鞋类品牌
2019/05/01 全球购物
IBatis持久层技术
2016/07/18 面试题
北京捷通华声语音技术有限公司Java软件工程师笔试题
2012/04/10 面试题
计算机网络专业个人的自我评价
2013/10/17 职场文书
药学专业个人自我评价
2013/11/11 职场文书
文明青少年标兵事迹材料
2014/01/28 职场文书
三八妇女节活动主持词
2014/03/17 职场文书
应届大学生求职信
2014/07/20 职场文书
影视广告专业求职信
2014/09/02 职场文书