当前位置: 首页 > 知识库问答 >
问题:

在react native中实现JavaScriptModule有什么指南吗?

微生俊健
2023-03-14

有兴趣在react-local中实现直接本机到javascript的调用。但没有找到任何指南。

请提供一些在react native中创建和注册javascript本机模块的示例。

已经发现来自官方本机模块android留档的代码有一个名为createJSModules的方法,它返回JavaScriptModule类的列表。

class AnExampleReactPackage implements ReactPackage {

  @Override
  public List<Class<? extends JavaScriptModule>> createJSModules() {
    return Collections.emptyList();
  }

  ...

}

Javadoc for com。脸谱网。反应桥JavaScriptModule说:

/**
 * Interface denoting that a class is the interface to a module with the same name in JS. Calling
 * functions on this interface will result in corresponding methods in JS being called.
 * ...
 */
@DoNotStrip
public interface JavaScriptModule {
}

我能够创建接口并将其类传递给createJSModules,但不知道如何从js代码中注册适当的javascript模块。

共有2个答案

盛超
2023-03-14

我不确定这是否可能,但您为什么要这样做?使用NativeAppEventEmitter/DeviceEventEmitter并将其作为您将在JS端收听的事件发送。

宇文俊风
2023-03-14

最后,在查看了reactjs源代码之后,我想出了解决方案,您需要:

>

  • 扩展JavaScriptModule并将其传递给定制react包(例如ActionsModule.java)的createJSModules方法
  • 在react activity getPackages方法或ReactInstanceManager中注册该包
  • 在js代码中创建同名js文件
  • 如下面清单所示,将其注册到BatchedBridge
  • 在react上下文初始化之后,您可以通过以下方式获取并调用:

    ActionsModule jsModule=上下文。getJSModule(ActionsModule.class);JS模块。呼叫动作(“问候”、“你好”);

    这将异步调用您注册的js模块方法。

    // AppPackage.java
    public class AppPackage implements ReactPackage {
    
        @Override
        public List<NativeModule> createNativeModules(ReactApplicationContext reactContext) {
            return Collections.emptyList();
        }
    
        @Override
        public List<Class<? extends JavaScriptModule>> createJSModules() {
            return Arrays.<Class<? extends JavaScriptModule>>asList(
                    ActionsModule.class
            );
        }
    
        @Override
        public List<ViewManager> createViewManagers(ReactApplicationContext reactContext) {
            return Collections.emptyList();
        }
    
    }
    
    // ActionsModule.java
    public interface ActionsModule extends JavaScriptModule {
    
        void callAction(String type, String value);
    
    }
    
    // MyReactActivity.java
    public class MyReactActivity extends ReactActivity implements ReactInstanceManager.ReactInstanceEventListener {
    
        ...
    
        @Override
        public void onReactContextInitialized(ReactContext context) {
            Acthtml" target="_blank">ionsModule jsModule = context.getJSModule(ActionsModule.class);
    
            jsModule.callAction("greet", "hello");
        }
    
        ...
    
    }
    
    // ActionsModule.js
    var ActionsModule = {
    
      callAction(type, value) {
        console.log("callAction => " + type + ":" + value);
      },
    
    }
    
    module.exports = ActionsModule;
    
    // index.android.js
    import {
      AppRegistry
    } from 'react-native';
    
    import App from './components/App';
    
    // js module registration
    var BatchedBridge = require('BatchedBridge');
    var ActionsModule = require('./ActionsModule');
    
    BatchedBridge.registerCallableModule(
      'ActionsModule',
      ActionsModule
    );
    //~ js module registration
    
    AppRegistry.registerComponent('MyApp', () => App);
    

    UPD

  •  类似资料:
    • 我想问为什么指令不是MIPS ISA的一部分。相反,他们实际上使其成为汇编程序员的伪指令。从硬件实现的角度来看,我只是无法识别和(这是MIPS ISA的一部分)之间的区别。 顺便说一下,《计算机组织与设计》一书说: 注意到冯·诺依曼关于“设备”简单性的警告,MIPS体系结构不包括分支,因为分支太复杂,要么会延长时钟周期时间,要么每条指令需要额外的时钟周期,因此两条更快的指令更有用。 但我仍然不知道

    • 实现指南 Pact workshop - 两小时从零起步掌握Pact 这些workshop可以带你从头到尾完成一个例子,涉及Pact支持的大部分概念。我们现在有Ruby、JVM和Android等workshop: Ruby JVM Android 支持的语言 Ruby JVM .NET Javascript Go Swift / Objective-C

    • 我正在阅读https://docs.oracle.com/javase/8/docs/technotes/guides/security/jsse/JSSERefGuide.html#SSLContext关于SSLContext类。特别是,关于init方法: 他们说,如果tm参数为null,则“……将搜索已安装的安全提供程序,以查找TrustManagerFactory的最高优先级实现,并从中获得

    • 本文向大家介绍Lua中模块以及实现方法指南,包括了Lua中模块以及实现方法指南的使用技巧和注意事项,需要的朋友参考一下 从使用的角度来看,一个模块就是一个程序库,可以通过Lua自身提供的require来加载。然后便得到一个全局变量,表示一个table。这个table就是像一个名字空间,其内容就是模块导出的所有东西,例如函数和常量。简单的说,Lua中的模块就是一个table,table中可以包括任何

    • RVM 是一个命令行工具,可以提供一个便捷的多版本 Ruby 环境的管理和切换。 https://rvm.io/ 如果你打算学习 Ruby / Rails, RVM 是必不可少的工具之一。 这里所有的命令都是再用户权限下操作的,任何命令最好都不要用 sudo. RVM 安装 $ gpg2 --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D

    • 问题内容: 使用Go编程语言;指针如何变得有用? (如果它们没有真正的用处,为什么不非法呢?) 问题答案: 任何数据类型的有用性取决于要解决的问题和用于解决该问题的方法。如果数据类型不适合该问题,那么它根本就不适合该问题,仅此而已。 Go编程语言(以及大多数其他编程语言)基于程序员可以用来构建新数据类型的 简单 规则。其中一些规则是: :创建一个指向T的新数据类型 :Ts数组 :包含T作为组成部分