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 日期转换成中文格式的函数
Jul 07 Javascript
JQuery 1.4 中的Ajax问题
Jan 23 Javascript
js函数名与form表单元素同名冲突的问题
Mar 07 Javascript
jquery实现横向图片轮播特效代码分享
Nov 19 Javascript
Bootstrap中的表单验证插件bootstrapValidator使用方法整理(推荐)
Jun 21 Javascript
jQuery搜索框效果实现代码(百度关键词联想)
Feb 25 Javascript
jQuery弹出div层过2秒自动消失
Nov 29 Javascript
AngularJS基于factory创建自定义服务的方法详解
May 25 Javascript
vuejs简单验证码功能完整示例
Jan 08 Javascript
vue+element创建动态的form表单及动态生成表格的行和列
May 20 Javascript
详解Vue中CSS样式穿透问题
Sep 12 Javascript
深入浅析React中diff算法
May 19 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
MySQL的FIND_IN_SET函数使用方法分享
2012/03/27 PHP
PHP用身份证号获取星座和生肖的方法
2013/11/07 PHP
session在php5.3中的变化 session_is_registered() is deprecated in
2013/11/12 PHP
利用phpexcel把excel导入数据库和数据库导出excel实现
2014/01/09 PHP
PHP访问Google Search API的方法
2015/03/05 PHP
PHP5.3以上版本安装ZendOptimizer扩展
2015/03/27 PHP
iOS+PHP注册登录系统 PHP部分(上)
2016/12/26 PHP
javascript import css实例代码
2008/07/18 Javascript
用JavaScript玩转游戏物理(一)运动学模拟与粒子系统
2010/06/19 Javascript
jquery.cookie.js 操作cookie实现记住密码功能的实现代码
2011/04/27 Javascript
jQuery常见开发技巧详细整理
2013/01/02 Javascript
jQuery提交多个表单的小技巧
2014/07/27 Javascript
jQuery实现仿美橙互联两级导航菜单的方法
2015/03/09 Javascript
Jquery插件实现点击获取验证码后60秒内禁止重新获取
2015/03/13 Javascript
JS建造者模式基本用法实例分析
2015/06/30 Javascript
详解Express笔记之动态渲染HTML(新手入坑)
2018/12/13 Javascript
jQuery实现为table表格动态添加或删除tr功能示例
2019/02/19 jQuery
关于js陀螺仪的理解分析
2019/04/11 Javascript
微信小程序实现左侧滑栏过程解析
2019/08/26 Javascript
layer实现弹出层自动调节位置
2019/09/05 Javascript
JS实现商城秒杀倒计时功能(动态设置秒杀时间)
2019/12/12 Javascript
vue 中url 链接左边的小图标更改问题
2019/12/30 Javascript
基于Element的组件改造的树形选择器(树形下拉框)
2020/02/27 Javascript
python逐行读取文件内容的三种方法
2014/01/20 Python
Python实现读取及写入csv文件的方法示例
2018/01/12 Python
Python3 读、写Excel文件的操作方法
2018/10/20 Python
Html5 滚动穿透的方法
2019/05/13 HTML / CSS
马来西亚奢侈品牌购物商城:Valiram 247
2020/09/29 全球购物
设计毕业生简历中的自我评价
2013/10/01 职场文书
先进个人事迹材料
2014/01/25 职场文书
伏羲庙导游词
2015/02/09 职场文书
交通安全月活动总结
2015/05/08 职场文书
2016年师德先进个人事迹材料
2016/02/29 职场文书
Python中的pprint模块
2021/11/27 Python
Python中time与datetime模块使用方法详解
2022/03/31 Python
MySQL 数据库范式化设计理论
2022/04/22 MySQL