react navite 简单原生方法双向调用示例

如果你说的是 React Native 原生模块(Native Modules)双向调用,面试里最简单、最容易讲清楚的就是:

JS → Native:调用原生方法

Native → JS:通过 EventEmitter 主动通知 JS

下面给你一个最小示例。

1. JS 调用 Native

假设 Android 原生提供:

复制代码
public class MyModule extends ReactContextBaseJavaModule {

    public MyModule(ReactApplicationContext context) {
        super(context);
    }

    @Override
    public String getName() {
        return "MyModule";
    }

    @ReactMethod
    public void hello(String name, Promise promise) {
        promise.resolve("Hello " + name);
    }
}

JS 侧:

复制代码
import {NativeModules} from 'react-native';

const {MyModule} = NativeModules;

async function test() {
  const result = await MyModule.hello('张三');

  console.log(result);
}

调用关系:

复制代码
React Native JS
     │
     │ MyModule.hello()
     ↓
Android Native
     │
     │ promise.resolve()
     ↓
React Native JS

2. Native 主动调用 JS

Native 不能像普通函数一样直接调用 JS,一般使用 DeviceEventEmitter / NativeEventEmitter。

Android:

复制代码
private void sendMessage() {
    getReactApplicationContext()
        .getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class)
        .emit("MyEvent", "Hello from Native");
}

JS:

复制代码
import {DeviceEventEmitter} from 'react-native';

useEffect(() => {
  const subscription = DeviceEventEmitter.addListener(
    'MyEvent',
    data => {
      console.log('收到 Native 消息:', data);
    }
  );

  return () => {
    subscription.remove();
  };
}, []);

调用关系:

复制代码
Android Native
     │
     │ emit("MyEvent")
     ↓
React Native JS
     │
     │ addListener()
     ↓
收到消息

3. 面试直接背这个"双向调用"

复制代码
              React Native JS
             ↗             ↘
      JS 调 Native       Native 通知 JS
          │                   │
          ↓                   ↓
    Native Module        EventEmitter
          │                   │
          ↓                   ↓
       原生方法            JS Listener

一句话回答面试官:

React Native 中 JS 调 Native,通常通过 NativeModules 暴露原生方法;Native 调 JS,通常通过事件机制,比如 DeviceEventEmitter 或 NativeEventEmitter,把消息主动派发给 JS。

如果你要准备 React Native 面试手写题,我也可以继续给你整理一套「JS ↔ Native、Bridge、TurboModule、Fabric」高频题。

相关推荐
Dream-Y.ocean1 小时前
鸿蒙PC平台逻控 PLC 编辑器适配实战:基于 Electron 壳方案的纯 JavaScript 梯形图编程与仿真引擎开发
javascript·编辑器·harmonyos
前端小D3 小时前
JS核心底层
前端·javascript
Dovis(誓平步青云)3 小时前
启元 T1 Pro 人机相声搭档:语音-触摸双通道的启元机器人节奏引擎设计
开发语言·前端·javascript·microsoft·交互
codeejun5 小时前
每日一Go·MySQL-11、覆盖索引 & 回表原理
javascript·数据库·mysql
用户298698530145 小时前
React 前端将 Excel 工作表导出为图片的技术实践
javascript·react.js·excel
麦麦麦当劳大王16 小时前
【油猴脚本】Boss直聘 岗位职责复制
开发语言·前端·javascript
只睡四小时17 小时前
Three.js Sub-tick:漏判 60.7%→0
开发语言·javascript·性能优化·ecmascript·游戏开发·three.js·碰撞检测
excel18 小时前
基于 GPT 的自动发布文章接口方案:从一句话或一张图片生成并发布内容
前端·javascript·后端
OpsEye1 天前
大模型 Token 计量不准,是什么原因,怎么解决??
javascript·ai编程
独隅1 天前
WebStorm Windows 版 React / Next.js 实战替换指南
javascript·windows·webstorm