本机模块如何回调JavaScript内部桥接方法,然后在内部方法中进行处理,例如将数据解析为JSON,然后引发react本机应用程序接收的事件?
对于跨平台桥接模块,我想避免在ObjectiveC和Java中重复代码。如果可能,我想用JavaScript编写跨平台桥接模块代码,并在Android和iOS中重用。
我当前的解决方案:
这工作。
这将导致两次调用sendEventWithName:
问题:
是否有一种方法可以让本机代码使用JS调用同步处理数据,然后使用sendEventSusName立即发送结果?
或者每个本地人
文件:MyNativeModule. m
// Use forwardEventWithName to forward events // processed by common cross-platform JS to the react native app RCT_EXPORT_METHOD(forwardEventWithName:(NSString*)name body:(NSString*)body) { [self sendEventWithName:name body:body]; } // 1 - react native app calls sendQueryToBluetoothDevice // 2 - device calls commandResponse when response received RCT_EXPORT_METHOD(sendQueryToBluetoothDevice:(NSString*)command { [_device sendCommand:command]; } // 1 - Receives XML response from external Bluetooth device // 2 - Sends XML to internal JS method for processing // 3 - Internal JS method uses forwardEventWithName // to send event to react native app - (void) commandResponse:(NSString *) xml { [self sendEventWithName:@"_processResponseInJavaScriptMethod" body:@{@"xml": configuration}]; }
文件:索引。js(本机模块)
// Parse xml in common JS code for both Android and iOS native modules emitter.addListener("_processResponseInJavaScriptMethod", (e) => { const body = parseXml(e.xml); // ?? Is there a way to send event directly using JS to the react native app ?? // Hack - Call native method forwardEventWithName to sendEventWithName to react native app. /// // This makes two _bridge enqueueJSCall's // 1 - One call to sendEventWithName "_myNativeModuleInternalMethod" // 2 - Second call to sendEventWithName "myNativeModuleEvent MyNativeModule.forwardEventWithName( 'myNativeModuleEventResponseReceived', JSON.stringify(body)); } })
不确定你所说的内部桥接模块Java脚本方法
是什么意思,但是JS代码可以通过方法将数据传递给本机,本机可以通过回调或promise将数据返回给JS。本机代码也可以向JS发送事件。
JS ---> Native // Method calls
Native ---> JS // Callbacks, Promises, Events
有关更多详细信息,请参阅本机模块文档:-https://facebook.github.io/react-native/docs/native-modules-ios.html - https://facebook.github.io/react-native/docs/native-modules-android.html
我建议在React Native中读一些关于批处理桥的内容。
本地人-
基本上,您可以使用JS端的静态方法定义一个模块,然后将其注册到批处理桥(registerCallableModule),这使您能够通过RCTBridge()从本机端直接调用此方法。enqueueJSCall,其中您将提供分别对应于您的模块和函数的moduleDotMethod;您还将传递一个唯一(或增量)标识符,稍后用于将响应映射到每个请求。
JS公司-
接下来,您将创建一个本机模块,该模块将在JS端被调用,以将数据发送回本机,传递响应数据和标识符,然后您将在本机端处理这些数据和标识符。
我曾参与过整个服务层位于JS端的项目,并成功地使用了这种方法。
我想从本机模块调用react本机函数。 我已经为我的react原生应用程序创建了一个条形码扫描仪插件,条形码扫描仪SDK在原生IOS中可用 现在我的问题是,一旦条形码扫描仪扫描数据并发送到本机IOS,我如何在我的反应本机应用程序中获取这些扫描数据?(我在IOS本机中获得了扫描数据) 我想在本机模块扫描数据并将这些数据发送到react-本机时调用react-本机应用程序函数 请给出例子或适当的文件,
朋友们好,我想让我的插件在react native中,我想从我的react native js文件调用我的ios native module函数,下面是我的代码 ios库代码如下 JS文件代码如下 我只想从我的js文件调用简单的函数到ios本机库类,但当我运行上面的代码时,我得到了像TypeError这样的错误:未定义不是一个对象(评估“MyLibManager.find事件”) 知道我该怎么解决
问题内容: 有什么办法可以看到JavaScript本机代码的声明吗?每当我尝试查看Chrome或Firefox中的本机功能时,都会显示“ ”: 这是什么意思,有什么工具可以帮助我阅读实际代码? 问题答案: Chrome或Firefox之所以说该代码是本地代码,是因为它确实是本地代码-WebKit和Firefox开发人员已使用C或C ++(而非JavaScript)对该功能进行了编码。但是,如果您想
我构建用于调试的android应用程序,使用
问题内容: 我陷入了本机项目中的一个问题。我试图做一个通用的需求文件,在其中导出所有模块。之后,我只需要我的“ require.js”文件,以避免在每个文件中都这样调用require(’../../ ModuleName’)。 我有4个文件: require.js: 在index.ios.js中(他的Home和MyView模块正确获取了importet) Home.js(模块MyView没有获得重
我在这里遵循了教程的第一步: https://facebook.github.io/react-native/docs/getting-started.html 然后我想从设备传感器中读取信息。 为此,我还学习了本教程: https://medium.com/react-native-training/using-sensors-in-react-native-b194d0ad9167 并以以下代