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 相关文章推荐
Ext面向对象开发实践(续)
Nov 18 Javascript
jquery中load方法的用法及注意事项说明
Feb 22 Javascript
Java与JavaScript中判断两字符串是否相等的区别
Mar 13 Javascript
使用jquery模拟a标签的click事件无法实现跳转的解决
Dec 04 jQuery
javascript中的event loop事件循环详解
Dec 14 Javascript
vuex 解决报错this.$store.commit is not a function的方法
Dec 17 Javascript
模块化react-router配置方法详解
Jun 03 Javascript
vue axios post发送复杂对象问题
Jun 04 Javascript
微信小程序实现圆形进度条动画
Nov 18 Javascript
JS错误处理与调试操作实例分析
Apr 13 Javascript
vue开发chrome插件,实现获取界面数据和保存到数据库功能
Dec 01 Vue.js
利用promise及参数解构封装ajax请求的方法
Mar 24 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中上传大体积文件时需要的设置
2006/10/09 PHP
在Windows下编译适用于PHP 5.2.12及5.2.13的eAccelerator.dll(附下载)
2010/05/04 PHP
PHP警告Cannot use a scalar value as an array的解决方法
2012/01/11 PHP
php采集内容中带有图片地址的远程图片并保存的方法
2015/01/03 PHP
php定时执行任务设置详解
2015/02/06 PHP
yum命令安装php7和相关扩展
2016/07/04 PHP
[原创]PHP实现字节数Byte转换为KB、MB、GB、TB的方法
2017/08/31 PHP
php中的buffer缓冲区用法分析
2019/05/31 PHP
在Laravel中实现使用AJAX动态刷新部分页面
2019/10/15 PHP
JavaScript延迟加载
2021/03/09 Javascript
JavaScript:Div层拖动效果实例代码
2013/08/06 Javascript
jQuery实现的导航条切换可显示隐藏
2014/10/22 Javascript
jQuery制作网页版选项卡
2016/07/28 Javascript
JavaScript-html标题滚动效果的简单实现
2016/09/08 Javascript
jQuery实现的简单日历组件定义与用法示例
2018/12/24 jQuery
详解vue-cli中使用rem,vue自适应
2019/05/06 Javascript
JS实现的对象去重功能示例
2019/06/04 Javascript
Vue+elementui 实现复杂表头和动态增加列的二维表格功能
2019/09/23 Javascript
js计时事件实现圆形时钟
2020/03/25 Javascript
[02:05]2014DOTA2国际邀请赛 BBC外卡赛赛后总结
2014/07/09 DOTA
[48:35]2018DOTA2亚洲邀请赛 4.1 小组赛 A组加赛 TNC vs Optic
2018/04/03 DOTA
[01:35:53]完美世界DOTA2联赛PWL S3 Magma vs GXR 第二场 12.13
2020/12/17 DOTA
Python图片裁剪实例代码(如头像裁剪)
2017/06/21 Python
快速了解Python相对导入
2018/01/12 Python
详解将Django部署到Centos7全攻略
2018/09/26 Python
django 通过url实现简单的权限控制的例子
2019/08/16 Python
解决Python图形界面中设置尺寸的问题
2020/03/05 Python
纯CSS3实现表单验证效果(非常不错)
2017/01/18 HTML / CSS
一个基于canvas的移动端图片编辑器的实现
2020/10/28 HTML / CSS
英国广泛的照明产品网站:Lights4living
2018/01/28 全球购物
寻找迷宫的一条出路,o通路;X:障碍
2016/07/10 面试题
应届大学生的推荐信
2013/11/20 职场文书
婚纱摄影师求职信范文
2014/04/17 职场文书
五一促销活动总结
2014/07/01 职场文书
政工师工作总结2015
2015/05/26 职场文书
python神经网络ResNet50模型
2022/05/06 Python