其实还算简单,我们直接@Override
重写一个getConstants
函数即可。
定义函数
在Module中定义
@Override
public class ToastModule extends ReactContextBaseJavaModule {
...
@Override
public Map<String, Object> getConstants() {
// 代码写这里
}
...
}
定义参数
在上述创建的函数中,需要返回一个
Map
对象,该对象存储的数据第一个String
类型为参数名称,第二个Object
类型为该参数值。
@Override
public Map<String, Object> getConstants() {
final Map<String, Object> constants = new HashMap<>();
constants.put("LONG", Toast.LENGTH_LONG);
constants.put("SHORT", Toast.LENGTH_SHORT);
return constants;
}
获取参数
那么,我们如何在RN代码中获取该参数值呢?很简单:
import { NativeModules } from 'react-native';
const MyModule = NativeModules.MyModule;
console.log('LONG VAL=', MyModule.LONG);
console.log('SHORT VAL=', MyModule.SHORT);
使用参数
参数我们定义好了,也能在rn端获取到了,那么我们如何传递到原生模块方法中?
很简单,在定义方法的时候多加一个参数,然后在rn端也同步传递参数即可。
比如原生端这么写:
@ReactMethod
public void show(String msg, int sType) {
Toast.makeText(mContext, msg, sType).show();
}
那么,我们就在rn端这么调用:
MyModule.show("testMessage", MyModule.LONG);
很简单吧!
总结
本文的核心就是在自定义的原生模块中创建一个getConstants
方法,用来定义能传递进来的参数数据。