首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >响应本机包装本机模块中创建的本机对象。

响应本机包装本机模块中创建的本机对象。
EN

Stack Overflow用户
提问于 2017-12-31 02:49:35
回答 1查看 454关注 0票数 0

我感兴趣的是将一些C++库包装为react本机模块,但我遇到了一些概念上的障碍。对这些东西很陌生,所以请容忍我!

我想包装一些类似于Juce 1AudioGraphIOProcessor的AudioProcessorGraph功能

然而,api的一个重要组件是将音频节点对象彼此连接起来,形成音频处理图。您可以想象一些非常类似于web音频api的东西:

代码语言:javascript
复制
const audioCtx = new AudioContext();
const oscillator = new OscillatorNode(audioCtx);
const gainNode = new GainNode(audioCtx);

oscillator.connect(gainNode).connect(audioCtx.destination);

在编写一行代码之前,我看到的问题是,我看不到用RCT_EXPORT_METHOD宏将本机对象的实例作为参数传递给另一个本机对象的方法调用的方法。objects --我使用ObjectWrap功能对本机节点加载项做了类似的事情。是否有类似的反应本土化的成就?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-12-31 16:26:59

RCT_EXPORT_METHOD用于将函数导出到IOS中的JS端。这里的警告是,您通过JS传递给本机或从本机传递到JS的参数应该是可序列化的。这是因为通信以异步方式通过RN进行。

在你的情况下我会这么做。让我们举个例子:

假设您在本机模块中有一个函数。

代码语言:javascript
复制
//Initialise a list to store audioContexts
ArrayList<AudioContext> audioCtxList = new ArrayList<AudioContext>();

@ReactMethod
public void createAudioContext(Callback cb){
AudioContext audioCtx = new AudioContext();
audioCtxList.add(audioCtx);
cb.invoke(//...index of the newly created audioCtx)
}

现在,在JS端,您可以使用一个引用来与本机模块对话。

所以下一个函数看起来就像

代码语言:javascript
复制
@ReactMethod
public void createOscillator(int audioCtxId){
 AudioCtx actx = // Get the audioContext from the list using the audioCtxId
 const oscillator = new OscillatorNode(audioCtx);
 const gainNode = new GainNode(audioCtx);
 oscillator.connect(gainNode).connect(audioCtx.destination);
}

因此,您不需要将任何本机对象导出到JS端,您也可以完成所需的功能。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48039576

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档