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 父窗口控制子窗口的行为-打开,关闭,重定位,回复
Apr 20 Javascript
window.open打开页面居中显示的示例代码
Dec 27 Javascript
js 验证身份证信息有效性
Mar 28 Javascript
jquery获取tagName再进行判断
May 29 Javascript
jquery.validate使用时遇到的问题
May 25 Javascript
js图片跟随鼠标移动代码
Nov 26 Javascript
JS遍历数组及打印数组实例分析
Jan 21 Javascript
详解用vue.js和laravel实现微信授权登陆
Jun 23 Javascript
angularJs在多个控制器中共享服务数据的方法
Sep 30 Javascript
100行代码实现vue表单校验功能(小白自编)
Nov 19 Javascript
《javascript设计模式》学习笔记四:Javascript面向对象程序设计链式调用实例分析
Apr 07 Javascript
VUE中setTimeout和setInterval自动销毁案例
Sep 07 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实现生成唯一会员卡号
2015/08/24 PHP
PHP常用的小程序代码段
2015/11/14 PHP
PHP编程实现csv文件导入mysql数据库的方法
2017/04/29 PHP
textContent在Firefox下与innerText等效的属性
2007/05/12 Javascript
javascript 面向对象继承
2009/11/26 Javascript
Extjs入门之动态加载树代码
2010/04/09 Javascript
JS实现字体选色板实例代码
2013/11/20 Javascript
jquery插件jquery倒计时插件分享
2013/12/27 Javascript
js调试系列 初识控制台
2014/06/18 Javascript
jquery插件EasyUI中form表单提交实例分享
2016/01/11 Javascript
jQuery form插件之ajaxForm()和ajaxSubmit()的可选参数项对象
2016/01/23 Javascript
详解Vue.js动态绑定class
2016/12/20 Javascript
微信小程序页面传值实例分析
2017/04/19 Javascript
JS实现的四级密码强度检测功能示例
2017/05/11 Javascript
详解如何使用Node.js编写命令工具——以vue-cli为例
2017/06/29 Javascript
js实现移动端导航点击自动滑动效果
2017/07/18 Javascript
vue2实现可复用的轮播图carousel组件详解
2017/11/27 Javascript
vue页面切换过渡transition效果
2018/10/08 Javascript
vue-week-picker实现支持按周切换的日历
2019/06/26 Javascript
基于JavaScript 实现拖放功能
2019/09/12 Javascript
vue.js路由mode配置之去掉url上默认的#方法
2019/11/01 Javascript
JS继承定义与使用方法简单示例
2020/02/19 Javascript
Vue3新特性之在Composition API中使用CSS Modules
2020/07/13 Javascript
JavaScript TAB栏切换效果的示例
2020/11/05 Javascript
python使用BeautifulSoup分析网页信息的方法
2015/04/04 Python
Python爬取附近餐馆信息代码示例
2017/12/09 Python
python利用requests库进行接口测试的方法详解
2018/07/06 Python
Python设计模式之解释器模式原理与用法实例分析
2019/01/10 Python
Python 中包/模块的 `import` 操作代码
2019/04/22 Python
python flask中动态URL规则详解
2019/11/22 Python
CSS实现半透明边框与多重边框的场景分析
2019/11/13 HTML / CSS
澳洲本土太阳镜品牌:Quay Australia
2019/07/29 全球购物
慰问敬老院活动总结
2014/04/26 职场文书
村级环境卫生整治方案
2014/05/04 职场文书
幼儿园开学家长寄语(2016秋季)
2015/12/03 职场文书
使用Django框架创建项目
2022/06/10 Python