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

在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

    • 13.1.实例:指南针 理解系统服务,我们先从一个简单的样例——指南针(Compass)——开始。它可以通过传感器服务获得传感器的输出,旋转屏幕上的表盘(Rose)显示方位。传感器服务是个有代表性的系统服务,也不难懂。 在例子中,我们先创建一个Activity,由它来访问传感器服务,订阅来自传感器的输出。然后自定义一个表盘控件(Rose),使之可以依据传感器端得到的数据旋转一定的角度。