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 学习笔记(十四) 正则表达式
Jan 22 Javascript
jQuery数组处理代码详解(含实例演示)
Feb 03 Javascript
javascript获取dom的下一个节点方法
Sep 05 Javascript
JavaScript中的索引数组、关联数组和静态数组、动态数组讲解
Nov 08 Javascript
常用的JS验证和函数汇总
Dec 23 Javascript
js密码强度实时检测代码
Mar 02 Javascript
node.js从数据库获取数据
May 08 Javascript
React Native预设占位placeholder的使用
Sep 28 Javascript
babel7.x和webpack4.x配置vue项目的方法步骤
May 12 Javascript
解决layui调用自定义方法提示未定义的问题
Sep 14 Javascript
为react组件库添加typescript类型提示的方法
Jun 15 Javascript
js实现3D旋转效果
Aug 18 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
NO3第三帝国留言簿制作过程
2006/10/09 PHP
根据中文裁减字符串函数的php代码
2013/12/03 PHP
php语言的7种基本的排序方法
2020/12/28 PHP
php实现学生管理系统
2020/03/21 PHP
thinkphp自定义权限管理之名称判断方法
2017/04/01 PHP
thinkphp5修改view到根目录实例方法
2019/07/02 PHP
Javascript中暂停功能的实现代码
2007/03/04 Javascript
javascript针对DOM的应用分析(二)
2012/04/15 Javascript
图片上传判断及预览脚本的效果实例
2013/08/07 Javascript
常规表格多表头查询示例
2014/02/21 Javascript
JS判断移动端访问设备并加载对应CSS样式
2014/06/13 Javascript
javascript动态生成树形菜单的方法
2015/11/14 Javascript
高效利用Angular中内置服务$http、$location等
2016/03/22 Javascript
图文详解JavaScript的原型对象及原型链
2016/08/02 Javascript
bootstrap手风琴折叠示例代码分享
2017/05/22 Javascript
3种vue路由传参的基本模式
2018/02/22 Javascript
vue-router实现编程式导航的代码实例
2019/01/19 Javascript
初学node.js中实现删除用户路由
2019/05/27 Javascript
Vue动态修改网页标题的方法及遇到问题
2019/06/09 Javascript
详解vue中在循环中使用@mouseenter 和 @mouseleave事件闪烁问题解决方法
2020/04/07 Javascript
jquery实现手风琴案例
2020/05/04 jQuery
python中os操作文件及文件路径实例汇总
2015/01/15 Python
用Python遍历C盘dll文件的方法
2015/05/06 Python
Python中py文件引用另一个py文件变量的方法
2018/04/29 Python
目前最全的python的就业方向
2018/06/05 Python
Tensorflow 多线程与多进程数据加载实例
2020/02/05 Python
Python3使用腾讯云文字识别(腾讯OCR)提取图片中的文字内容实例详解
2020/02/18 Python
python通过对字典的排序,对json字段进行排序的实例
2020/02/27 Python
用Python开发app后端有优势吗
2020/06/29 Python
HTML5 使用 sessionStorage 进行页面传值的方法
2018/07/02 HTML / CSS
小学运动会演讲稿
2014/08/25 职场文书
地道战观后感2000字
2015/06/04 职场文书
数据结构课程设计心得体会
2016/01/15 职场文书
详解mysql三值逻辑与NULL
2021/05/19 MySQL
Python图片验证码降噪和8邻域降噪
2021/08/30 Python
Java 多线程协作作业之信号同步
2022/05/11 Java/Android