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 相关文章推荐
JavaScript入门教程(6) Window窗口对象
Jan 31 Javascript
传智播客学习之java 反射
Nov 22 Javascript
Jquery升级新版本后选择器的语法问题
Jun 02 Javascript
JavaScript SetInterval与setTimeout使用方法详解
Nov 15 Javascript
jquery实现的树形目录实例
Jun 26 Javascript
jQuery实现为控件添加水印文字效果(附源码)
Dec 02 Javascript
微信小程序 跳转传参数与传对象详解及实例代码
Mar 14 Javascript
js中toString()和String()区别详解
Mar 23 Javascript
jQuery EasyUI Layout实现tabs标签的实例
Sep 26 jQuery
浅谈VueJS SSR 后端绘制内存泄漏的相关解决经验
Dec 20 Javascript
解决vue里a标签值解析变量,跳转页面,前面加默认域名端口的问题
Jul 22 Javascript
vue+echarts实现多条折线图
Mar 21 Vue.js
微信小程序 实战小程序实例
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
PHP 文件缓存的性能测试
2010/04/25 PHP
php 截取字符串并以零补齐str_pad() 函数
2011/05/07 PHP
PHP中字符安全过滤函数使用小结
2015/02/25 PHP
PHP 常用的header头部定义汇总
2015/06/19 PHP
利用Dojo和JSON建立无限级AJAX动态加载的功能模块树
2007/03/24 Javascript
11款基于Javascript的文件管理器
2009/10/25 Javascript
jquery 查找iframe父级页面元素的实现代码
2011/08/28 Javascript
分享一道笔试题[有n个直线最多可以把一个平面分成多少个部分]
2012/10/12 Javascript
js css后面所带参数含义介绍
2013/08/18 Javascript
jQuery+AJAX实现网页无刷新上传
2015/02/22 Javascript
jQuery插件multiScroll实现全屏鼠标滚动切换页面特效
2015/04/12 Javascript
关于function类中定义变量this的简单说明
2016/05/28 Javascript
vue.js中mint-ui框架的使用方法
2017/05/12 Javascript
js如何编写简单的ajax方法库
2017/08/02 Javascript
JS获取月的第几周和年的第几周实例代码
2018/12/05 Javascript
实例介绍JavaScript中多种组合继承
2019/01/20 Javascript
JavaScript实现的九种排序算法
2019/03/04 Javascript
通过jQuery学习js类型判断的技巧
2019/05/27 jQuery
el-select数据过多懒加载的解决(loadmore)
2019/05/29 Javascript
js实现表格数据搜索
2020/08/09 Javascript
Python学生成绩管理系统简洁版
2020/04/05 Python
pandas object格式转float64格式的方法
2018/04/10 Python
selenium+python实现自动登录脚本
2018/04/22 Python
Python使用pickle模块储存对象操作示例
2018/08/15 Python
python调用其他文件函数或类的示例
2019/07/16 Python
python实现ip地址查询经纬度定位详解
2019/08/30 Python
Python: tkinter窗口屏幕居中,设置窗口最大,最小尺寸实例
2020/03/04 Python
Groupon荷兰官方网站:高达70%的折扣
2019/11/01 全球购物
草莓网中国:StrawberryNet中国
2020/08/17 全球购物
自我评价范文
2013/12/22 职场文书
高中毕业生的个人自我评价
2014/02/21 职场文书
房产委托公证书
2014/04/08 职场文书
小学生作文评语
2014/04/18 职场文书
投资建议书模板
2014/05/12 职场文书
python 命令行传参方法总结
2021/05/25 Python
JavaScript中isPrototypeOf函数
2021/11/07 Javascript