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 学习笔记(八)javascript对象
Apr 12 Javascript
js对table的td进行相同内容合并示例详解
Dec 27 Javascript
js+html5实现canvas绘制椭圆形图案的方法
May 21 Javascript
JavaScript核心语法总结(推荐)
Jun 02 Javascript
Bootstrap基本插件学习笔记之标签切换(17)
Dec 08 Javascript
详解微信小程序——自定义圆形进度条
Dec 29 Javascript
jquery mobile移动端幻灯片滑动切换效果
Apr 15 Javascript
javaScript中封装的各种写法示例(推荐)
Jul 03 Javascript
vue中$refs的用法及作用详解
Apr 24 Javascript
vue.js内置组件之keep-alive组件使用
Jul 10 Javascript
Vue中实现权限控制的方法示例
Jun 07 Javascript
node实现爬虫的几种简易方式
Aug 22 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
PHP在不同页面间传递Json数据示例代码
2013/06/08 PHP
Yii2中OAuth扩展及QQ互联登录实现方法
2016/05/16 PHP
ThinkPHP使用Ueditor的方法详解
2016/05/20 PHP
ThinkPHP Where 条件中常用表达式示例(详解)
2017/03/31 PHP
实例讲解PHP中使用命名空间
2019/01/27 PHP
Laravel框架实现简单的学生信息管理平台案例
2019/05/07 PHP
事件模型在各浏览器中存在差异
2010/10/20 Javascript
JavaScript高级程序设计(第3版)学习笔记6 初识js对象
2012/10/11 Javascript
javascript中[]和{}对象使用介绍
2013/03/20 Javascript
JS实现可缩放、拖动、关闭和最小化的浮动窗口完整实例
2015/03/04 Javascript
JS实现网页每隔3秒弹出一次对话框的方法
2015/11/09 Javascript
jQuery使用$.ajax提交表单完整实例
2015/12/11 Javascript
详解jquery事件delegate()的使用方法
2016/01/25 Javascript
js事件驱动机制 浏览器兼容处理方法
2016/07/23 Javascript
微信小程序图表插件(wx-charts)实例代码
2017/01/17 Javascript
详解在React里使用&quot;Vuex&quot;
2018/04/02 Javascript
Javascript Promise用法详解
2018/05/10 Javascript
基于React+Redux的SSR实现方法
2018/07/03 Javascript
Bootstrap Table中的多选框删除功能
2018/07/15 Javascript
一次Webpack配置文件的分离实战记录
2018/11/30 Javascript
详解vue3.0 的 Composition API 的一种使用方法
2020/10/26 Javascript
JS创建自定义对象的六种方法总结
2020/12/15 Javascript
[45:15]Optic vs VP 2018国际邀请赛淘汰赛BO3 第一场 8.24
2018/08/25 DOTA
[01:04:20]完美世界DOTA2联赛PWL S2 LBZS vs Forest 第一场 11.29
2020/12/02 DOTA
[55:11]完美世界DOTA2联赛PWL S2 SZ vs LBZS 第一场 11.26
2020/11/30 DOTA
简单实现python爬虫功能
2015/12/31 Python
Selenium控制浏览器常见操作示例
2018/08/13 Python
python GUI库图形界面开发之PyQt5布局控件QVBoxLayout详细使用方法与实例
2020/03/06 Python
python 安装移动复制第三方库操作
2020/07/13 Python
浅析pandas随机排列与随机抽样
2021/01/22 Python
英国复古服装购物网站:Collectif
2019/10/30 全球购物
C语言变量的命名规则都有哪些
2013/12/27 面试题
小学生元旦广播稿
2014/02/21 职场文书
求职信格式要求
2014/05/23 职场文书
入党宣誓大会后的感想
2015/08/10 职场文书
nginx常用配置conf的示例代码详解
2022/03/21 Servers