react native js中调用native中的方法

2023-11-02

react native js中调用native中的方法

这里主要涉及到几个类

  1. java
    /**
    <ul><li>Base class for Catalyst native modules that require access to the {@link ReactContext}</li>
    <li>instance.
    */
    ReactContextBaseJavaModule //native的类继承该类

2.ReactPackage—-所有的继承自ReactContextBaseJavaModule的子类,都会注册到这个ReactPackage里维护的一个集合里。

3.关键的类ReactApplication,里面只有一个方法ReactNativeHost,该抽象类中主要实现方法getPackages,这里会获取在上面ReactPackage中的列表,我们将会在这注册自己书写的packages,这里默认会注册一个MainReactPackage。

具体代码流程

native端主要有三个类:

//module类
public class TestDemoModule extends ReactContextBaseJavaModule {
    public TestDemoModule(ReactApplicationContext reactContext) {
        super(reactContext);
    }

    @Override
    public String getName() {
        return "TestDemoModule";
    }

    @ReactMethod
    public void show(String str) {
        Toast.makeText(getReactApplicationContext(), str, Toast.LENGTH_SHORT).show();
    }
}

下面是package类,module会注册到modules这个集合里:

public class TestDemoPackage implements ReactPackage {
    @Override
    public List<NativeModule> createNativeModules(ReactApplicationContext reactContext) {
        List<NativeModule> modules = new ArrayList<>();

        modules.add(new TestDemoModule(reactContext));

        return modules;
    }

    @Override
    public List<Class<? extends JavaScriptModule>> createJSModules() {
        return Collections.emptyList();
    }

    @Override
    public List<ViewManager> createViewManagers(ReactApplicationContext reactContext) {
        return Collections.emptyList();
    }
}

下面就是在MainApplication中ReactNativeHost通过getPackages获取native端的注册类,


public class MainApplication extends Application implements ReactApplication {

    private final ReactNativeHost mReactNativeHost = new ReactNativeHost(this) {
        @Override
        public boolean getUseDeveloperSupport() {
            return BuildConfig.DEBUG;
        }

        @Override
        protected List<ReactPackage> getPackages() {
            return Arrays.<ReactPackage>asList(
                    new MainReactPackage(),
                    new TestDemoPackage()
            );
        }
    };

    @Override
    public ReactNativeHost getReactNativeHost() {
        return mReactNativeHost;
    }

    @Override
    public void onCreate() {
        super.onCreate();
        SoLoader.init(this, /* native exopackage */ false);
    }

上面完成了整体的编写,下面是在js端的调用:

这里简单列出两种:

  • 直接直接引入getName返回的名字,代码如下:

    import {
      AppRegistry,
      StyleSheet,
      Text,
      View,
      TestDemoModule,
    } from 'react-native';
    
    var {NativeModules}=require('react-native');
    var testDemoModuleAndroid = NativeModules.TestDemoModule;
    //下面就可以调用了,
    testDemoModuleAndroid.show('Hello Toast of native');
  • 直接引入NativeModules,这个就更简单了:

    import {
      AppRegistry,
      StyleSheet,
      Text,
      View,
      NativeModules,
    } from 'react-native';
    //直接使用,是不是更简单
    NativeModules.TestDemoModule.show('成功调用原生方法');

总结

上面就是两种方法,还是很简单的吧,希望能给初学的同学参考。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

react native js中调用native中的方法 的相关文章

  • 微信小程序Mustache语法

    小程序开发的wxml里 用到了Mustache语法 所以 非常有必要把Mustache研究下 什么是Mustache Mustache是一个logic less 轻逻辑 模板解析引擎 它是为了使用户界面与业务数据 内容 分离而产生的 它可以
  • C++20的原子智能指针

    一 原子变量和智能指针 在前面学习时提到过智能指针本身不是线程安全的 因为虽然其计数器是线程安全控制但数据不是 这也就是说其在多线程中赋值时 会产生冲突 而原子变量恰恰能够解决这个问题 不过在早先的c 标准中 原子变量不支持智能指针 所以要
  • base64上传图片,并且限制上传图片大小,

    param file data return bool false string 判断base64文件大小 以及格式 public function upimgbase64 file data if preg match data s im
  • camunda使用指南

    参考 Camunda 快速入门 Camunda SpringBoot与进阶内容 camunda中文站 camunda官方英文文档 文章目录 使用流程 1 下载和安装 2 编辑流程 3 部署流程 使用 Camunda Modeler 部署流程
  • Skeleton Key(万能密码)与 Hook PasswordChangeNotify

    1 Skeleton Key 使用Skeleton Key 万能密码 可以对域内权限进行持久化操作 Skeleton Key特点 Skeleton Key被安装在64位域控服务器上 支持Windows Server2003 Windows
  • swagger中Schema(required = true)已过时问题

    在使用swagger生成openapi时 idea显示 required 已经过时了 Swagger将忽略对象字段上的 Schema required true 注释 解决方案 1 降低swagger版本 2 修改为 Schema requ
  • setInterval的停止与重新启动

    使用js处理问题的时候 我们可能会经常使用到setInterval 来进行定时任务或者轮询的操作 那么如何让setInterval停止和重新启动呢 下边的代码就可以实现的呦 如果有更好的方法 不吝赐教 定义定时任务 function fun
  • 百度API获取地理坐标

    楼主是在用R画地图的时候需要获取各个地点的地理坐标从而接触到百度API的 不过它也可以应用到很多其它方面 楼主实验室有前往不同地区进行采样的需求 那么就可以记录下采样地点后 通过百度API一次性获取所有地理坐标 从而减免了很多麻烦呢 那么鉴
  • 对无签名的APP进行签名 命令行签名

    下面是在命令行对app进行签名 就是那么简单
  • 实例分割新思路之SOLO v1&v2深度解析

    前言 实例分割一般有两种做法 一种是top down 既先检测 bbox 后在每个bbox中进行mask的分割 例如Mask R CNN 第二种为bottom up做法 先分割出每一个像素 再进行归类 本文介绍的两篇论文另辟蹊径 直接分割实
  • 彻底卸载Keil4和Keil5

    一 卸载 在keil安装目录下找到uninstall exe文件 点击卸载 卸载完后将该文件下的所有文件删除 二 清除注册表 按下windows R打开运行 输入regedit打开注册表 将HKEY CLASSES ROOT目录下的 所有U
  • 2020初步总结

    一晃来这快两年了 今年写的博客也还算比较勤快吧 最忙的应该是上半年 经历了忙成狗的阶段 下半年还算稍微好点 对今年的总结是 1 每个月保证出博客量在12篇以上 这点还是有保证的 最忙的5月的时候 也是能保证12篇 2 对相关的学习进行了深入
  • 深度学习模型参数量计算

    若你的模型parameters为7327930 则 7327930 4 Byte 1024 1024 27 95 MB
  • 【Git详解大全】

    文章目录 1 Git 概述 1 1 版本控制 2 Git常用命令 2 1 初始化本地库 2 3 添加到暂存区 2 4 提交本地库 2 5 修改文件 2 7 历史版本 3 分支操作 3 1 什么是分支 3 2 分支的操作 4 Git团队协作
  • theos linux环境,MAC OS X下的Linux环境

    关键字 HomeBrew 好比Windows下的Cygwin 安装Homebrew 该si胜过macport ruby e curl fsSL https raw githubusercontent com Homebrew install
  • 【知识分享】C语言应用-易错篇

    一 C语言简介 C语言结构简洁 具有高效性和可移植性 因此被广泛应用 但究其历史的标准定义 C语言为了兼容性在使用便利性作出很大牺牲 在 C陷阱与缺陷 一书中 整理出大部分应用过程中容易出错的点 本文为 C陷阱与缺陷 的浓缩版本 想要更详细
  • 009 5道例题讲解函数递归——“C”

    函数递归是什么 程序调用自身的编程技巧称为递归 recursion 递归做为一种算法在程序设计语言中广泛应用 一个过程或函数在其定义或说明中有直接或间接 调用自身的一种方法 它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问
  • Leetcode2486-追加字符以获得子序列

    双指针遍历即可 class Solution public int appendCharacters string s string t int n s size m t size int l 0 r 0 while l
  • 连接游戏服务器网络延迟高,网络延迟_连wifi玩游戏网络延迟高-太平洋IT百科

    网络延迟是游戏玩家最不能忍的 为了解决网络延迟的问题 玩家们装了光纤 换了路由 然而 为你我用了半年的积蓄 玩个农药还跳ping 开局两分钟 延迟400ms 网络延迟在王者荣耀中卡得连鲁班七号都表示 我想静静 连WIFI玩游戏网络延迟高怎么

随机推荐

  • 为什么动态库不能被其他动态或静态库包含

    如果静态库包含了动态库 则动态库失去了它的意思 因为动态库是在运行时调用的 如果包含在静态库里 意味着在编译时把动态库编译进去了 gcc不会做这么荒唐的事的 如果动态库包含了动态库 这也没必要 因为运行时可以直接调用了 为什么还要包含到另一
  • 腾讯云服务器搭建小皮面板phpstudy教程

    腾讯云控制台设置 找到自己服务器所在的实例 这里可以获得远程登录的账号密码 域名解析在下面添加自己ip解析到购买的域名就好了 搭建云服务器及php环境搭建教程如下 方包用的是windows server 服务器 适合新手 不像linux那样
  • GDI+ 中路径渐变画刷的使用

    背景 路径是一系列相互连接的直线和曲线 由许多不同类型的点所构成 用于表示复杂的不规则图形 GraphicsPath 类表示 路径渐变画刷允许设置颜色从中心向边界渐变的画刷 可以设置中心点颜色和边界点的颜色 构建路径渐变画刷 使用路径构建
  • Linux命令集锦-持续更新

    centos版本 CentOS Linux release 7 6 1810 Core 一 查看端口占用 lsof Linux安装 sudo yum install lsof Mac安装 brew install lsof lsof i p
  • 2020年排名前10的前端框架

    Ant Design 网站链接 https ant design index cn 蚂蚁金服出品 非常著名的框架 就算你不了解前端 也会在公司的项目中多少听到程序员说起过 目前很多公司都在用 已经很成熟 而且提供了对设计师友好的 Sketc
  • tensorflow目标检测api使用过程中的问题

    tensorflow目标检测api使用过程中的问题 使用环境 win10 pycharm开发平台 所有的依赖包都是用pip安装的 按照官方要求把api的依赖库装完之后在测试的时候提示no module named object detect
  • xshell卸载不干净导致无法安装

    卸载xshell 删除两个地方的注册表 Windows 文件夹下 C Program Files x86 InstallShield Installation Information 这个目录下 删了这个文件夹 F3FDFD5A A201
  • 【译】Hard Forks, Soft Forks, Defaults and Coercion

    区块链领域的一个重要论据是硬叉或软叉是否是首选的协议升级机制 两者之间的基本区别在于 软叉通过严格减少有效的交易集来改变协议的规则 所以遵循旧规则的节点仍然会进入新链 假设大多数矿工 验证者实施叉 而硬叉允许以前无效的交易和块变得有效 所以
  • centos7部署tomcat

    1 下载tomcat和jdk的tar gz包 并放在 root目录下 链接 https pan baidu com s 1fsJh8f6 rQxFzA5SIzUSfw 提取码 6zmg 2 解压文件 tar xf apache tomcat
  • [PCIe]LTSSM与电源管理

    1 LTSSM LTSSM全称是Link Training and Status State Machine 有以下11个状态 Detect Polling Configuration Recovery L0 L0s L1 L2 Hot R
  • 【cfeng work】什么是云原生 Cloud Native

    WorkProj 内容管理 云原生 云原生应用 十二要素应用 cfeng的work理解 本文introduce 云原生 Cloud Native相关内容 随着技术的迭代 从最初的物理机 gt 虚拟机 从单机 gt 分布式微服务 现在的热门概
  • C语言自定义函数求和

    include
  • vi笔记2——vi之简单编辑

    vi笔记2 vi之简单编辑 vi 简单编辑主要包含以下内容 Moving the cursor Adding and changing text Deleting moving and copying text More ways to e
  • 华三H3C交换机如何配置堆叠irf虚拟化(未配置检测机制)

    华三交换机如何配置堆叠irf IRF Intelligent Resilient Framework 智能弹性架构 是华三的软件虚拟化技术 将一台以上的交换机组合起来共同工作 能提供尽可能多的端口 多台交换机经过配置后可看成为一个虚拟的一体
  • 解析复杂的json数组嵌套

    chanNameList channelName 通道1 enable 1 perX 0 perY 0 rgbaBG 00000000 rgbaFont 00000000 channel 1 ip 192 168 121 13 status
  • JDK8的下载和安装,以及配置环境变量

    一 JDK的下载 https www oracle com java technologies downloads 1 进入JDK下载页面 2 进入下载页面 3 下载 二 JDK的安装 1 双击安装包 进入安装界面 直接点击下一步 2 选择
  • 综述---图像处理中的注意力机制

    重磅好文 微软亚研 对深度神经网络中空间注意力机制的经验性研究 论文 An Empirical Study of Spatial Attention Mechanisms in Deep Networks 高效Transformer层出不穷
  • Android MPAndroidChart使用,X轴标签自定义显示,坐标显示不全,换行显示

    一 自定义显示 XAxis xAxis chart getXAxis 获取设置X轴 ValueFormatter valueFormatter new ValueFormatter private final String xLableLi
  • 论文写作专题记录

    本文笔记来自20200317智源AI的分享 一 论文写作小白的成长之路 用理论支撑你 唉 你的这个研究确实是很有用 每个理论的后面可能都要有一个解释 即使别人不懂你这个理论 但是他也能理解这个事情 那么我们总结一下以往的工作是怎样的 所以我
  • react native js中调用native中的方法

    react native js中调用native中的方法 这里主要涉及到几个类 java ul li Base class for Catalyst native modules that require access to the lin