gpt4 book ai didi

javascript - React Native NativeModules 在一个对象中传递多个函数

转载 作者:行者123 更新时间:2023-11-28 04:12:56 26 4
gpt4 key购买 nike

我正在使用 React Native,尝试创建一个可以接受 NSDictionary 函数的 native 模块。例如,假设我想调用一个具有多个潜在回调的函数。假设我可以有 0 个回调、15 个或中间的任何数字。我使用字典,所以我只包含我想要使用的回调函数:

MyModule.showInterstitial({
onLoad:()=>{console.log("Loaded")},
failedToLoad:()=>{console.log("Failed to load")},
onDismiss:()=>{console.log("Did dismiss")},
})

这对于使用 API 的人来说更有意义,让代码看起来像这样,而不是像下面这样有 15 个不同的回调并且只使用了 3 个:

MyModule.showInterstitial(null,
null,
null,
null,
()=>{console.log("Loaded")},
null,
null,
()=>{console.log("Failed to load")},
null,
null,
null,
null,
null,
null,
()=>{console.log("Did dismiss")},
null
})

当我查看 Objective C 代码时,我可以尝试创建这样的方法:

RCT_EXPORT_METHOD(showInterstitial: (NSDictionary *)callbacks) {
// implementation
}

但是这个 ObjC 方法的问题是 NSDictionary 创建了 NSDictionaries 的 NSDictionary (换句话说,RCTConvert 没有方法将 javascript 函数转换为 RCTResponseSenderBlock)。我尝试过类型转换它,但它不起作用。如果我只是尝试调用它,我的应用程序就会崩溃。

所以我想知道是否有人以前处理过这个问题或者知道如何处理它?<​​/p>

最佳答案

对于这样的用例,我认为您应该考虑在 JavaScript 中使用事件 API,并让您的桥接模块扩展 RCTEventEmitter。桥接基础设施更多地是为数据输入和输出而设计的,而不是功能。您可以拥有桥接模块触发的 loaddismiss 事件,并且您的 JS 可以根据需要进行订阅。 showInterstitial 方法可以使用返回回调来返回同步错误/成功。

更改桥接模块以扩展 RCTEventEmitter,然后在需要触发加载和解除事件时使用 [self sendEventWithName:body:]

希望这有帮助...

关于javascript - React Native NativeModules 在一个对象中传递多个函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46108907/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com