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 相关文章推荐
JSON.parse()和JSON.stringify()使用介绍
Jun 20 Javascript
jQuery简单实现验证邮箱格式
Jul 15 Javascript
JavaScript判断图片是否已经加载完毕的方法汇总
Feb 05 Javascript
关于Sequelize连接查询时inlude中model和association的区别详解
Feb 27 Javascript
jQuery实现元素的插入
Feb 27 Javascript
Jquery中attr与prop的区别详解
May 27 jQuery
详解Angular之constructor和ngOnInit差异及适用场景
Jun 22 Javascript
react-router browserHistory刷新页面404问题解决方法
Dec 29 Javascript
ES6之模版字符串的具体使用
May 17 Javascript
Jquery 获取相同NAME 或者id删除行操作
Aug 24 jQuery
解决vue init webpack 下载依赖卡住不动的问题
Nov 09 Javascript
AJAX实现指定部分页面刷新效果
Oct 16 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中使用CURL伪造来路抓取页面或文件
2011/05/04 PHP
PHP生成验证码时“图像因其本身有错无法显示”的解决方法
2013/08/07 PHP
php中使用key,value,current,next和prev函数遍历数组的方法
2015/03/17 PHP
简单了解将WordPress中的工具栏移到底部的小技巧
2015/12/31 PHP
2017年最新PHP经典面试题目汇总(上篇)
2017/03/17 PHP
PHP实现动态获取函数参数的方法示例
2018/04/02 PHP
php中字符串和整数比较的操作方法
2019/06/06 PHP
laravel5.0在linux下解决.htaccess无效和去除index.php的问题
2019/10/16 PHP
才发现的超链接js导致网页中GIF动画停止的解决方法
2007/11/02 Javascript
JQUERY CHECKBOX全选,取消全选,反选方法三
2008/08/30 Javascript
input 高级限制级用法
2009/03/26 Javascript
JavaScript 学习小结(适合新手参考)
2009/07/30 Javascript
JS可以控制样式的名称写法一览
2014/01/16 Javascript
js格式化时间和js格式化时间戳示例
2014/02/10 Javascript
js实现点击图片改变页面背景图的方法
2015/02/28 Javascript
Ajax+FormData+javascript实现无刷新表单信息提交
2016/10/24 Javascript
js实现web调用摄像头 js截取视频画面
2019/04/21 Javascript
vue2.0自定义指令示例代码详解
2019/04/25 Javascript
JS操作字符串转数字的常见方法示例
2019/10/29 Javascript
微信小程序实现上传照片代码实例解析
2020/08/04 Javascript
[00:47]TI7不朽珍藏III——沙王不朽展示
2017/07/15 DOTA
Python魔术方法详解
2015/02/14 Python
Python实现嵌套列表去重方法示例
2017/12/28 Python
Python使用Selenium爬取淘宝异步加载的数据方法
2018/12/17 Python
Python图像处理之颜色的定义与使用分析
2019/01/03 Python
Python小白不正确的使用类变量实例
2020/05/29 Python
python实现企业微信定时发送文本消息的示例代码
2020/11/24 Python
详解HTML5中的元素与元素
2015/08/17 HTML / CSS
澳大利亚女装精品店:Alannah Hill
2020/07/29 全球购物
电子商务个人自荐信
2013/12/12 职场文书
大学生收银员求职信分享
2014/01/02 职场文书
期末自我鉴定
2014/01/23 职场文书
中小学教师继续教育心得体会
2016/01/19 职场文书
Python多线程 Queue 模块常见用法
2021/07/04 Python
用Python爬取英雄联盟的皮肤详细示例
2021/12/06 Python
Golang 入门 之url 包
2022/05/04 Golang