ReactNative-JS 调用原生方法实例代码


Posted in Javascript onOctober 08, 2016

ReactNative-JS 调用原生方法实例代码

第一步首先创建ReactNative 模块类继承ReactContextBaseJavaModule

package com.mixture;

import android.content.Context;
import android.widget.Toast;

import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.bridge.ReactContextBaseJavaModule;
import com.facebook.react.bridge.ReactMethod;

/**
 * Created by Administrator on 2016/9/22.
 */

public class MyNativeModule extends ReactContextBaseJavaModule {

  public static final String REACTCLASSNAME = "MyNativeModule";
  private Context mContext;

  public MyNativeModule(ReactApplicationContext reactContext) {
    super(reactContext);
    mContext = reactContext;
  }

  @Override
  public String getName() {
    return REACTCLASSNAME;
  }

  /**
   * 必须添加反射注解不然会报错
   * 这个方法就是ReactNative将要调用的方法,会通过此类名字调用
   * @param msg
   */
  @ReactMethod
  public void callNativeMethod(String msg) {
    Toast.makeText(mContext, msg, Toast.LENGTH_SHORT).show();
  }
}

第二步创建一个React包管理器实现ReactPackage将每个模块放到模块集合中

package com.mixture;

import com.facebook.react.ReactPackage;
import com.facebook.react.bridge.JavaScriptModule;
import com.facebook.react.bridge.NativeModule;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.uimanager.ViewManager;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

/**
 * Created by Administrator on 2016/9/22.
 */

public class MyReactPackage implements ReactPackage {

  @Override
  public List<NativeModule> createNativeModules(ReactApplicationContext reactContext) {
    List<NativeModule> modules = new ArrayList<>();
    modules.add(new MyNativeModule(reactContext));
    return modules;
  }

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

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

第三步在应用入口注册这个React包管理器

package com.mixture;

import android.app.Application;
import android.util.Log;

import com.facebook.react.ReactApplication;
import com.facebook.react.ReactInstanceManager;
import com.facebook.react.ReactNativeHost;
import com.facebook.react.ReactPackage;
import com.facebook.react.shell.MainReactPackage;

import java.util.Arrays;
import java.util.List;

public class MainApplication extends Application implements ReactApplication {

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

    @Override
    protected List<ReactPackage> getPackages() {
      return Arrays.<ReactPackage>asList(
          new MainReactPackage(),
          //在应用中注册这个包管理器
          new MyReactPackage()
      );
    }
  };

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

第四步就是在ReactNative中调用react-native中提供一个NativeModules通过模块名字和方法名字进行调用

/**
 * Sample React Native App
 * https://github.com/facebook/react-native
 * @flow
 */

import React, {Component} from 'react';
import {
  AppRegistry,
  StyleSheet,
  Text,
  View,
  NativeModules,
} from 'react-native';

class Mixture extends Component {
  render() {
    return (
      <View style={styles.container}>
        <Text style={styles.instructions} onPress={() => this.onClick()}>
          调用用原生方法
        </Text>
      </View>
    );
  }

  /**
   * 调用原生方法
   */
  onClick() {
    NativeModules.MyNativeModule.callNativeMethod('成功调用原生方法');
  }
}
const styles = StyleSheet.create({
  container: {
    flex: 1,
    justifyContent: 'center',
    alignItems: 'center',
    backgroundColor: '#F5FCFF',
  },
  instructions: {
    textAlign: 'center',
    color: '#333333',
    marginBottom: 5,
  },
});

AppRegistry.registerComponent('Mixture', () => Mixture);

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

Javascript 相关文章推荐
在html页面中包含共享页面的方法
Oct 24 Javascript
JavaScript 小型打飞机游戏实现原理说明
Oct 28 Javascript
js获取时间(本周、本季度、本月..)
Nov 22 Javascript
php的文件上传入门教程(实例讲解)
Apr 10 Javascript
JavaScript实现从数组中选出和等于固定值的n个数
Sep 03 Javascript
JavaScript跨平台的开源框架NativeScript
Mar 24 Javascript
快速掌握Node.js中setTimeout和setInterval的使用方法
Mar 21 Javascript
JS定时器使用,定时定点,固定时刻,循环执行详解
May 31 Javascript
详解react-native-fs插件的使用以及遇到的坑
Sep 12 Javascript
JS脚本加载后执行相应回调函数的操作方法
Feb 28 Javascript
vue移动端弹框组件的实例
Sep 25 Javascript
js实现随机点名功能
Dec 23 Javascript
微信小程序 实战小程序实例
Oct 08 #Javascript
node.js实现博客小爬虫的实例代码
Oct 08 #Javascript
阿里云ecs服务器中安装部署node.js的步骤
Oct 08 #Javascript
JavaScript“尽快失败”的原则实例详解
Oct 08 #Javascript
jQuery如何解决IE输入框不能输入的问题
Oct 08 #Javascript
微信小程序 canvas API详解及实例代码
Oct 08 #Javascript
微信小程序 animation API详解及实例代码
Oct 08 #Javascript
You might like
比较strtr, str_replace和preg_replace三个函数的效率
2013/06/26 PHP
php 常用算法和时间复杂度
2013/07/01 PHP
php对csv文件的读取,写入,输出下载操作详解
2013/08/10 PHP
php实现的替换敏感字符串类实例
2014/09/22 PHP
Javascript 实现的数独解题算法网页实例
2013/10/15 Javascript
利用js动态添加删除table行的示例代码
2013/12/16 Javascript
Linux使用Node.js建立访问静态网页的服务实例详解
2017/03/21 Javascript
Vue.use源码分析
2017/04/22 Javascript
vue和react等项目中更简单的实现展开收起更多等效果示例
2018/02/22 Javascript
javascrit中undefined和null的区别详解
2019/04/07 Javascript
原生js实现自定义滚动条组件
2021/01/20 Javascript
[01:36]DOTA2完美大师赛趣味视频之与队友相处的十万个技巧
2017/11/19 DOTA
[47:03]完美世界DOTA2联赛PWL S3 access vs LBZS 第一场 12.20
2020/12/23 DOTA
python对数组进行反转的方法
2015/05/20 Python
python django 实现验证码的功能实例代码
2017/05/18 Python
Python pandas常用函数详解
2018/02/07 Python
Python+PyQt5实现美剧爬虫可视工具的方法
2019/04/25 Python
python 抓包保存为pcap文件并解析的实例
2019/07/23 Python
Python3 列表,数组,矩阵的相互转换的方法示例
2019/08/05 Python
Pycharm 安装 idea VIM插件的图文教程详解
2020/02/21 Python
python+opencv实现移动侦测(帧差法)
2020/03/20 Python
绝对令人的惊叹的CSS3折叠效果(3D效果)整理
2012/12/30 HTML / CSS
纯CSS3打造属于自己的“小黄人”
2016/03/14 HTML / CSS
阿拉伯书店:Jamalon
2019/07/24 全球购物
实习鉴定范文
2013/12/19 职场文书
酒店个人求职信范文
2014/01/25 职场文书
新教师工作感言
2014/02/16 职场文书
学雷锋演讲稿
2014/03/04 职场文书
给学校的建议书
2014/03/12 职场文书
2014公司党员自我评价范文
2014/09/11 职场文书
导游词怎么写
2015/02/04 职场文书
医院办公室主任岗位职责
2015/04/01 职场文书
如何开发一个渐进式Web应用程序PWA
2021/05/10 Javascript
pytorch 权重weight 与 梯度grad 可视化操作
2021/06/05 Python
Java GUI编程菜单组件实例详解
2022/04/07 Java/Android
Android实现图片九宫格
2022/06/28 Java/Android