有时候 App 需要访问平台 API,但 React Native 可能还没有相应的模块包装;或者你需要复用一些 Java 代码,而不是用 Javascript 重新实现一遍;又或者你需要实现某些高性能的、多线程的代码,譬如图片处理、数据库、或者各种高级扩展等等。
我们把 React Native 设计为可以在其基础上编写真正的原生代码,并且可以访问平台所有的能力。这是一个相对高级的特性,我们并不认为它应当在日常开发的过程中经常出现,但具备这样的能力是很重要的。如果 React Native 还不支持某个你需要的原生特性,你应当可以自己实现该特性的封装。
以官方文档为例,实现原生模块的封装
实现步骤
创建一个原生模块
原生模块是一个继承了
ReactContextBaseJavaModule
的 Java 类,它可实现一些 JavaScript 所需的功能。我们这里在 JavaScript 里写ToastExample.show('Awesome', ToastExample.SHORT);
,调起一个 Toast 通知。
该Java类建立的位置应在android/app/src/main/java/com/your-app-name/
目录下,将其命名为ToastModule.java
这里的your-app-name即为你创建的项目的名字 下同
代码如下:
//此处的your-app-name即为你创建的项目的名字 下同
package com.your-app-name;
import android.widget.Toast;
import com.facebook.react.bridge.NativeModule;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.bridge.ReactContext;
import com.facebook.react.bridge.ReactContextBaseJavaModule;
import com.facebook.react.bridge.ReactMethod;
import java.util.Map;
import java.util.HashMap;
public class