react-native文档未更新,照着文档实现还是坑了不少,记录下基本步骤。
1,继承ReactContextBaseJavaModule
a,getName:模块名称
b,getConstants:常量映射
c,@ReactMethod注解暴露java方法
public void show(String message, int duration) {
Toast.makeText(getReactApplicationContext(), message, duration).show();
}
2,注册原生模块
a,提供一个ReactPackage(继承ReactPackage)
b, public List<NativeModule> createNativeModules(ReactApplicationContext reactContext)
添加原生模块。
public List<NativeModule> createNativeModules(ReactApplicationContext reactContext) {
List<NativeModule> modules = new ArrayList<>(1);
modules.add(new MyToast(reactContext));
return modules;
}
c,注册包(ReactPackage)
1),ReactInstanceManager.addPackage原生实现的ReactPackage;
2),ReactApplication重写getPackages.
protected List<ReactPackage> getPackages() {
return Arrays.<ReactPackage>asList(
new MainReactPackage(), new MyReactPackage()
);
}
3,js使用
a,js引入原生模块
var { NativeModules } = require('react-native');
var MyToast = NativeModules.MyToast;
b,调用
MyToast.show('you click me!', MyToast.SHORT);