ReactNative-Android插件

ReactNative-Android插件

一、编写插件

  1. android项目包目录下创建ToastModule.java并继承ReactContextBaseJavaModule

  2. 实现构造函数接收NAContext

  3. 重写getName方法返回模块名称

  4. 重写getConstants方法导出js使用常量

  5. 定义模块功能方法并使用@ReactMethod注解当前方法

package com.awesomeproject;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.bridge.ReactContextBaseJavaModule;
import com.facebook.react.bridge.ReactMethod;
import java.util.HashMap;
import java.util.Map;
//1
public class ToastModule extends ReactContextBaseJavaModule {
private static ReactApplicationContext reactContext;
private static final String DURATION_SHORT_KEY = "SHORT";
private static final String DURATION_LONG_KEY = "LONG";
//2
public ToastModule(@NonNull ReactApplicationContext context) {
super(context);
reactContext = context;
}
//3
@NonNull
@Override
public String getName() {
return "ToastExample";
}
//4
@Nullable
@Override
public Map<String, Object> getConstants() {
final Map<String, Object> constants = new HashMap<>();
constants.put(DURATION_SHORT_KEY, Toast.LENGTH_SHORT);
constants.put(DURATION_LONG_KEY, Toast.LENGTH_LONG);
return constants;
}
//5
@ReactMethod
public void show(String message, int duration) {
Toast.makeText(getReactApplicationContext(), message, duration).show();
}
}

二、注册插件

  1. android项目包目录下创建CustomToastPackage.java并继承ReactPackage

  2. 重写createNativeModules方法添加模块,以便js调用

  3. 在MainApplication.java的getPackages方法中添加新插件注册

package com.awesomeproject;
import androidx.annotation.NonNull;
import com.facebook.react.ReactPackage;
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;
public class CustomToastPackage implements ReactPackage {
@NonNull

回调使用

import com.facebook.react.bridge.Callback;
Callback.invoke(a+b);

Promises

使用await调用配置了promise的方法并配以async

import com.facebook.react.bridge.Promise;
promise.resolve(map);
promise.reject(E_LAYOUT_ERROR, e);

js调用测试

export default class HelloWorldApp extends Component {
handleClick(e) {
ToastExample.show('hello app', ToastExample.SHORT);
}
render() {
return (
<View style={{ flex: 1, justifyContent: "center", alignItems: "center" }}>
<Button
onPress={this.handleClick}
title="Test Toast"
color="#841584"
accessibilityLabel="Learn more about this purple button"
/>
</View>
);
}
}
posted @   前端小鑫同学  阅读(3)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示