我正在尝试新的 React Native 架构。我已在我的文件中启用它gradle.properties。此错误仅适用于 Android,我还没有尝试过 iOS。
我正在遵循此处提到的计算器的确切示例。
我收到一条错误消息
error: Error: While resolving module `rtn-calculator/js/NativeCalculator.js`, the Haste package `rtn-calculator` was found. However the module `js/NativeCalculator.js` could not be found within the package. Indeed, none of these files exist:
* `/Users/transformhub/Desktop/rnapp/RTNCalculator/js/NativeCalculator.js(.native|.android.js|.native.js|.js|.android.jsx|.native.jsx|.jsx|.android.json|.native.json|.json|.android.ts|.native.ts|.ts|.android.tsx|.native.tsx|.tsx)`
* `/Users/transformhub/Desktop/rnapp/RTNCalculator/js/NativeCalculator.js/index(.native|.android.js|.native.js|.js|.android.jsx|.native.jsx|.jsx|.android.json|.native.json|.json|.android.ts|.native.ts|.ts|.android.tsx|.native.tsx|.tsx)`
at resolveHasteName (/Users/transformhub/Desktop/rnapp/node_modules/metro-resolver/src/resolve.js:173:9)
at Object.resolve (/Users/transformhub/Desktop/rnapp/node_modules/metro-resolver/src/resolve.js:63:20)
at ModuleResolver.resolveDependency (/Users/transformhub/Desktop/rnapp/node_modules/metro/src/node-haste/DependencyGraph/ModuleResolution.js:111:31)
at DependencyGraph.resolveDependency (/Users/transformhub/Desktop/rnapp/node_modules/metro/src/node-haste/DependencyGraph.js:260:43)
at Object.resolve (/Users/transformhub/Desktop/rnapp/node_modules/metro/src/lib/transformHelpers.js:177:21)
at Graph._resolveDependencies (/Users/transformhub/Desktop/rnapp/node_modules/metro/src/DeltaBundler/Graph.js:432:35)
at Graph._processModule (/Users/transformhub/Desktop/rnapp/node_modules/metro/src/DeltaBundler/Graph.js:218:38)
at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
at async Graph._addDependency (/Users/transformhub/Desktop/rnapp/node_modules/metro/src/DeltaBundler/Graph.js:314:20)
at async Promise.all (index 2)
Run Code Online (Sandbox Code Playgroud)
完整的仓库在这里
下面是示例代码 …
java android typescript react-native react-native-turbomodule
React Native 最近引入了对Turbo Modules的实验性支持,它允许开发人员用 C++ 编写代码并直接从 Javascript 调用它。
是否可以用 Rust 而不是 C++ 编写 Turbo 模块?一般来说,Rust 与 C / C++ 具有良好的互操作性,所以我希望这是可能的,但在搜索 Google、StackOverflow、GitHub 等后我找不到任何示例。
如果可能的话,这样做有什么缺点吗?例如,您是否丢失了打字信息?
我按照此处的指南创建了一个涡轮模块。这很好。
https://reactnative.dev/docs/the-new-architecture/pillars-turbomodules
我想在这个 Turbo 模块中使用 Swift 代码。我尝试使用此代码添加一个 Swift 文件并修改 ,RTNCalculator.mm以便在从 Objective-C 调用的 Swift 中进行数字添加。
SwiftCalculator.swift
import Foundation
@objc class SwiftCalculator: NSObject {
@objc func add(a: Double, b: Double) -> Double {
return a + b
}
}
Run Code Online (Sandbox Code Playgroud)
RTN计算器.mm
#import "RTNCalculatorSpec.h"
#import "RTNCalculator.h"
#import "RTNCalculator-Swift.h"
@implementation RTNCalculator
RCT_EXPORT_MODULE()
- (void)add:(double)a b:(double)b resolve:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject {
SwiftCalculator *calculator = [SwiftCalculator new];
double value = [calculator addWithA:a b:b];
NSNumber *result = [[NSNumber alloc] initWithDouble:value];
resolve(result);
}
- (std::shared_ptr<facebook::react::TurboModule>)getTurboModule:
(const facebook::react::ObjCTurboModule::InitParams &)params
{ …Run Code Online (Sandbox Code Playgroud) objective-c swift objective-c-swift-bridge react-native react-native-turbomodule
我正在按照此处的指南在 React Native 中创建 Turbo 模块。 https://reactnative.dev/docs/next/the-new-architecture/pillars-turbomodules
如何在 iOS 上发出事件?该文档仅显示如何从 React 调用本机函数,而不显示如何从 Turbo 模块发出事件。
对于 Android,您将获得一个ReactApplicationContext对象,它允许您使用上下文对象创建像这样的发射器。
private val emitter = context.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter::class.java)
emitter.emit(eventName, eventArray)
Run Code Online (Sandbox Code Playgroud)
你如何在 iOS 上做同样的事情?