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」高频题。

相关推荐
zzzzzz3101 小时前
react-bits:把“酷炫组件”放回 React 组件化的语境里看
javascript·react.js·动效
平头哥技术团队10 小时前
Day 10 | 工欲善其事:VS Code 配置与项目归档
android·开发语言·前端·javascript·html·交互
yume_sibai10 小时前
Element Plus 数据展示组件完全指南(15个核心组件)
前端·javascript·vue.js
zzz_236811 小时前
个人 AI 记忆如何跨工具复用:用 Markdown、索引和 Skill 搭一个可治理的记忆库
前端·人工智能·react.js·前端框架·agent·agent测评
剑之所向13 小时前
.NET 官方`System.Threading.Channels`
前端·javascript·数据库
渡我白衣14 小时前
并查集:基础认识与模拟实现
android·java·javascript·数据结构·c++·算法·并查集
八角丶15 小时前
Node 网络编程 —— TLS 模块
javascript·后端·node.js
倔强的石头10615 小时前
【Linux指南】动静态库系列(七):符号表与重定位:链接器如何把函数调用接起来
linux·前端·javascript
图扑软件16 小时前
中篇・运笔|统一 DataModel 底座,HT UI 组件万物同源
javascript·低代码·ui·性能优化·数据可视化