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 相关文章推荐
php中给js数组赋值方法
Mar 10 Javascript
extjs 分页使用jsp传递数据示例
Jul 29 Javascript
js中的内部属性与delete操作符介绍
Aug 10 Javascript
Javascript模仿淘宝信用评价实例(附源码)
Nov 26 Javascript
jQuery CSS3自定义美化Checkbox实现代码
May 12 Javascript
倾力总结40条常见的移动端Web页面问题解决方案
May 24 Javascript
JavaScript数据操作_浅谈原始值和引用值的操作本质
Aug 23 Javascript
Node.js测试中的Mock文件系统详解
Nov 21 Javascript
layui前端框架之table表数据的刷新方法
Aug 17 Javascript
node实现简单的增删改查接口实例代码
Aug 22 Javascript
layui的表单提交以及验证和修改弹框的实例
Sep 09 Javascript
Vue中通过属性绑定为元素绑定style行内样式的实例代码
Apr 30 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时间字段究竟使用INT还是DateTime的说明
2012/02/27 PHP
PHP基于文件存储实现缓存的方法
2015/07/20 PHP
Zend Framework处理Json数据方法详解
2016/12/09 PHP
PHP编程计算文件或数组中单词出现频率的方法
2017/05/22 PHP
QQ邮箱的一个文本编辑器代码
2007/03/14 Javascript
JavaScript开发时的五个注意事项
2007/12/08 Javascript
JS input文本框禁用右键和复制粘贴功能的代码
2010/04/15 Javascript
return false;和e.preventDefault();的区别
2010/07/11 Javascript
js 对小数加法精度处理示例说明
2013/12/27 Javascript
jQuery中click事件用法实例
2014/12/26 Javascript
微信+angularJS的SPA应用中用router进行页面跳转,jssdk校验失败问题解决
2016/09/09 Javascript
js获取文件里面的所有文件名(实例)
2017/10/17 Javascript
微信小程序 冒泡事件原理解析
2019/09/27 Javascript
js实现盒子移动动画效果
2020/08/09 Javascript
vue项目中企业微信使用js-sdk时config和agentConfig配置方式详解
2020/12/15 Vue.js
[01:21]辉夜杯战队访谈宣传片—CDEC
2015/12/25 DOTA
[53:03]Optic vs TNC 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
[06:45]DOTA2-DPC中国联赛 正赛 Magma vs LBZS 选手采访
2021/03/11 DOTA
Python模拟鼠标点击实现方法(将通过实例自动化模拟在360浏览器中自动搜索python)
2017/08/23 Python
python3+PyQt5使用数据库表视图
2018/04/24 Python
Python3将数据保存为txt文件的方法
2019/09/12 Python
SELENIUM自动化模拟键盘快捷键操作实现解析
2019/10/28 Python
Python高级特性——详解多维数组切片(Slice)
2019/11/26 Python
python 回溯法模板详解
2020/02/26 Python
CSS的pointer-events属性详细介绍(作用和注意事项)
2014/04/23 HTML / CSS
TCP/IP中的TCP和IP分别承担什么责任
2012/04/21 面试题
物业管理求职自荐信
2013/09/25 职场文书
大学生找工作推荐信范文
2013/11/28 职场文书
咨询公司各岗位职责
2013/12/02 职场文书
业务员薪酬管理制度
2014/01/15 职场文书
腾讯广告词
2014/03/19 职场文书
护士节活动总结
2014/08/29 职场文书
HTML+CSS+JS实现图片的瀑布流布局的示例代码
2021/04/22 HTML / CSS
CSS变量实现主题切换的方法
2021/06/23 HTML / CSS
在Spring-Boot中如何使用@Value注解注入集合类
2021/08/02 Java/Android
Android存储中最基本的文件存储方式
2022/04/30 Java/Android