1、基本理念

RN APP本质上也是原生APP,只是在原生APP中加入了React Native视图的支持。
因此获取RN APP的启动参数的方法原生APP是一样的,获取启动参数后再通过合适的方法传递给RN视图。
如何获得启动参数,不要再搜索RN如何获得启动参数,直接参考原生APP获得启动参数的文章。
可以参考这个例子:
ndroid中一个APP启动另一个APP并传递参数

本文重点说明如何将启动参数传递给React Native代码。

2、ReactNative的Ativity继承关系

    MainActivity --> ReactActivity --> Activity

3、参数传递的原理及实现

下面重点介绍如何将获取的启动参数传递给RN视图。
重点阅读 ReactActivity 类中的如下代码:

    public abstract class ReactActivity extends Activityimplements DefaultHardwareBackBtnHandler, PermissionAwareActivity {//定义私有变量mDelegateprivate final ReactActivityDelegate mDelegate;//在构造函数中创建mDelegateprotected ReactActivity() {mDelegate = createReactActivityDelegate();}//创建mDelegate的方法,这里注释很清楚,可以重写该方法并自定义delegate/*** Called at construction time, override if you have a custom delegate implementation.*/protected ReactActivityDelegate createReactActivityDelegate() {return new ReactActivityDelegate(this, getMainComponentName());}//关键的地方,mDelegate.loadApp创建了React Native视图,并传入参数。//具体见mDelegate.loadApp的代码。protected final void loadApp(String appKey) {mDelegate.loadApp(appKey);}}

loadApp方法所调用的mDelegate.loadApp 方法,是创建React 视图并传入参数的核心代码所在:

                    public class ReactActivityDelegate {//....protected void loadApp(String appKey) {if (mReactRootView != null) {throw new IllegalStateException("Cannot loadApp while app is already running.");}mReactRootView = createRootView();mReactRootView.startReactApplication(getReactNativeHost().getReactInstanceManager(),appKey,getLaunchOptions());getPlainActivity().setContentView(mReactRootView);}//....}}

注意: startReactApplication函数的最后一个参数getLaunchOptions()返回值是传给ReactView的参数,我们要在这里把启动参数传入。看看getLaunchOptions()的实现:

        protected @Nullable Bundle getLaunchOptions() {return null;}

什么也没返回,这简直太好了,我们只要在这里把我们的初始化参数给他就行了。

以上都是基础原理的准备,如果觉得有些晦涩,直接看如下的具体实现代码就可以了。

            public class MainActivity extends ReactActivity {//重写这个方法,返回自定义的delegate.@Overrideprotected ReactActivityDelegate createReactActivityDelegate() {return new MyReactDelegate(this,getMainComponentName());}//自定义MyReactDelegateclass  MyReactDelegate extends ReactActivityDelegate {public MyReactDelegate(Activity activity, @javax.annotation.Nullable String mainComponentName) {super(activity, mainComponentName);}//重点是重写这个方法,把启动参数在这里准备好。@javax.annotation.Nullable@Overrideprotected Bundle getLaunchOptions() {//获取传入的参数Intent intent     = getIntent();String data_str = intent.getStringExtra("data");Bundle bundle = new Bundle();//bundle.putString("bundle","android传递的初始化参数");bundle.putString("data",data_str);return bundle;}}}

4、在ReactView中使用参数

在React Native 代码的render方法中使用传入的参数:

     render() { var  initProps = this.props.bundle;return( <Text style={styles.text_hello}{initProps}</Text>);}

结束

本文整理自:
ReactNative入门之android与rn初始化参数的传递
原作写的很好~~~ 我这里只是整理,便于以后学习参考。

ReactNative入门之android与rn初始化参数的传递相关推荐

  1. android rn动态技术,ReactNative入门之android与rn初始化参数的传递

    1.基本理念 RN APP本质上也是原生APP,只是在原生APP中加入了React Native视图的支持. 因此获取RN APP的启动参数的方法原生APP是一样的,获取启动参数后再通过合适的方法传递 ...

  2. 01、【江科大自化协stm32F103c8t6】笔记之【入门32单片机及GPIO初始化参数配置】

    目录 一.前言 二.必要资料 1.C语言类型 2.片上资源/外设 3.引脚定义 4.系统结构 三.GPIO初始化 1.首先使用RCC开启GPIO的时钟 2.其次使用GPIO_Init函数初始化GPIO ...

  3. kalman简单例子——初始化参数对kalman性能的影响

    此篇为第⑤篇,多目标跟踪系列文章: 基础demor入门①②:公式推导③④:深入分析初始化参数的影响⑤: ① Matlab Kalman滤波例子--小球跟踪解析 :matlab官方例子,单目标跟踪.匀速 ...

  4. ReactNative入门(一)——环境搭建及第一个RN项目—HelloWorld

    ReactNative入门--本篇以及接下来的几篇有关RN的文章,是默认你对前端相关知识如Node,React,以及原生移动端Android可以熟练使用的情况下(最起码达到了解会用的程度)为前提的!不 ...

  5. Android中动态初始化布局参数以及ConstraintLayout使用中遇到的坑

    Android中动态初始化布局以及ConstraintLayout遇到的一个坑 ConstraintLayout是Android中的一个很强大的布局,它通过控件之间的相对定位,来完成一个layout中 ...

  6. Android MIPI转LVDS显示屏调试之---SN65DSI84初始化参数的确定(3)

    基于高通Msm8937平台,SN65DSI84后面简称DSI84. 打开DSI Tuner,选择目标设备,这里我们是SN65DSI84 Panel Inputs 1.1  Panel Info 这些数 ...

  7. ReactNative入门

    简要介绍 什么是 ReactNative? React Native (以下简称 RN)是 Facebook 研发并开源的应用框架,由 React 和应用平台的原生功能组成.RN 的主要编程语言是 J ...

  8. iMobile for ReactNative入门使用介绍

    ##iMobile for ReactNative入门使用介绍 ####iMobile for ReactNative是SuperMap iMobile推出的一款基于React-Native框架的移动 ...

  9. ORACLE初始化参数文件概述

    ORACLE初始化参数文件概述 在9i之前,参数文件只有一种,它是文本格式的,称为pfile,在9i及以后的版本中,新增了服务器参数文件,称为spfile,它是二进制格式的.这两种参数文件都是用来存储 ...

最新文章

  1. 洛谷P1908求逆序对【树状数组】
  2. 解决 : Shell 脚本 $‘\r‘: command not found 问题
  3. termux怎么生成木马_一个木马病毒是如何诞生的?
  4. Backend Qt5Agg is interactive backend. Turning interactive mode on.
  5. 产品经理适合当项目经理吗?
  6. 使用JSONP实现跨域通信
  7. 内网访问已经启动的vue项目
  8. 完美世界服务器维护多久,完美世界服务端启动和维护
  9. 后台事务调用需启动工作流监听
  10. 算法工程师面试题总结
  11. 【蓝桥杯】-- 竞赛规则及说明(Python程序设计)
  12. 河北省计算机对口试题,河北省对口计算机试题及答案.doc
  13. “双月”数据集的生成
  14. 微信小程序:修改单选radio大小样式
  15. Excel2016 怎么做数据分类汇总
  16. 2022-06-30 Android app WakeLock息屏状态下唤醒屏幕并且解锁demo
  17. 硕士毕业论文讨论部分怎么写啊?
  18. Multisim电路仿真-验证KCL和KVL
  19. Ghostscript已有字体报错can‘t find font file问题的原因
  20. 第6期(江西省吉安市永丰县)县长手机信箱工作简报(自吹自擂政绩,自圆其说)

热门文章

  1. Javascript提升阶段学习
  2. “变态级”系统管理员笔试题 我的答卷
  3. InfluxDB学习之InfluxDB的安装和简介
  4. 手写注解实现SpringMVC
  5. PHP. 02®. Ajax异步处理、常见的响应状态、XMLHttpRequest对象及API、ajax的get/post方法、...
  6. 文东工作室开通微信公众号了!欢迎订阅!~
  7. eclipse导入项目发生的Android Private Libraries丢失
  8. java的第一个程序 ----Hello World
  9. 【Java】MapReduce编程的编程思想以及基于Hadoop的Wordcount的程序的实现
  10. CMM已经落伍了,敏捷才是王道