android - 在 react-native 中从 TypeScript 调用本机函数
问题描述
最近我需要一个简单的函数来与本机代码交互,但我决定不构建一个包,因为它不是很有用。我创建的 java 文件就像它们来自插件一样,并在 MainApplication 中注册。
我正在使用打字稿,所以现在我正在努力处理 rn 到 java 的交互。我尝试了一个 js 文件,如下所示:
import NativeModules from 'react-native';
const AndroidService = NativeModules;
export default { AndroidService }
但随后我必须定义类型(来自 vs 代码的消息):
Property 'play' does not exist on type '{ AndroidService: typeof import("/home/karol/Git/TailosiveHub-react/node_modules/@types/react-native/index"); }'.
我尝试在项目的根目录中创建一个index.d.ts
文件,但这不起作用。
如何在打字稿中定义本机模块的类型?
主要应用:
@Override
protected List<ReactPackage> getPackages() {
@SuppressWarnings("UnnecessaryLocalVariable")
List<ReactPackage> packages = new PackageList(this).getPackages();
// Packages that cannot be autolinked yet can be added manually here, for example:
// packages.add(new MyReactNativePackage());
packages.add(new AndroidServicePackage());
// packages.add(new MainReactPackage());
return packages;
}
安卓服务包:
@Override
public List<NativeModule> createNativeModules(ReactApplicationContext reactContext) {
return Arrays.<NativeModule>asList(new AndroidServiceModule(reactContext));
}
安卓服务模块:
@Override
public String getName() {
return "AndroidService";
}
方法:
@ReactMethod
public void play(String streamingURL/*, ReadableMap options*/) {
doSomething();
}
解决方案
NativeModules 导入包含内部的原生模块,因此您只需将 AndroidService 模块提取为属性即可。
import NativeModules from 'react-native';
const { AndroidService } = NativeModules
export default { AndroidService }
或者,您可以像这样简单地导出它:
import NativeModules from 'react-native';
exports.default = NativeModules.AndroidService;
这应该会为您提供所需的结果,前提是您在提供给 React Native 的包中添加了名为 AndroidService 的相应本机模块。
推荐阅读
- swift - 无法将“UUID”类型的值转换为预期的参数类型“KeyPath”
- ' 在 SwiftUI 中
- python - 代码不适用于展平嵌套列表的所有测试用例
- python - 如何使用 Selenium 和 Python 在突出显示的脚本中单击 web 元素
- sql - HiveQL - 根据条件计算两行之间的时间差
- jenkins-groovy - 使用 jenkins 或 groovy 脚本更改文件中的文本
- android - 一个应用程序是否可以作为 Android 共享选项多次列出(YouTube 播放和队列)
- html - 如何在表中插入过滤列表并为每列添加额外的命名行
- c# - 我想以编程方式在 datagridview 中添加列和 sql 查询
- python - 尝试使用 Selenium 登录但无法正常工作
- php - XDebug 设置负责显示数组和对象中的元素数量