返回

RN与原生交互初体验:基本页面跳转

前端

在RN开发中,绝大部分工作都可以在JS端轻松完成,然而也存在一些功能只能由原生端实现。此时,RN和原生端就不可避免地需要进行交互,例如页面跳转、数据传递等。本篇文章将以最常见的用例:RN——原生、原生——RN——原生,来讲解RN与原生端的交互流程。深入浅出的剖析,定能助你轻松掌握这项技能。

RN与原生交互原理

在进行页面跳转之前,首先需要了解RN与原生端是如何进行交互的。RN与原生端的交互主要通过JavaScriptCore(以下简称JSC)实现,JSC是一个开源的JavaScript引擎,它被RN框架集成在JS运行时中,作为JavaScript代码的执行环境。当RN应用程序需要与原生端进行交互时,JSC会将JavaScript代码编译成原生代码,然后通过JNI(Java Native Interface)接口调用原生的API,从而实现RN与原生端的交互。

RN——原生页面跳转

在RN中,可以通过Linking.openURL()方法来打开一个原生页面。Linking.openURL()方法接受一个URL参数,该URL可以是本地URL,也可以是远程URL。如果URL是本地URL,则原生端会根据URL打开相应的页面;如果URL是远程URL,则原生端会打开系统自带的浏览器来打开该URL。

原生——RN页面跳转

在原生端,可以通过IntentURL Scheme来打开一个RN页面。

  • 通过Intent打开RN页面

    Intent intent = new Intent();
    intent.setAction("com.example.myapp.OPEN_RN_PAGE");
    intent.putExtra("pageName", "HomePage");
    startActivity(intent);
    
  • 通过URL Scheme打开RN页面

    Intent intent = new Intent();
    intent.setAction(Intent.ACTION_VIEW);
    intent.setData(Uri.parse("myapp://HomePage"));
    startActivity(intent);
    

原生——RN——原生页面跳转

在原生端打开RN页面后,可以通过EventEmitter模块来向RN端发送消息,从而实现原生与RN之间的通信。

// 创建一个EventEmitter对象
EventEmitter emitter = new EventEmitter();

// 发送消息
emitter.emit("message", "Hello from Native");

在RN端,可以通过NativeEventEmitter模块来监听原生端发送的消息。

// 创建一个NativeEventEmitter对象
const emitter = new NativeEventEmitter();

// 监听消息
emitter.addListener("message", (message) => {
  console.log(message);
});

总结

通过本文的讲解,相信大家对RN与原生端的交互有了一定的了解。RN与原生端的交互是一个非常重要的技术,它可以帮助我们开发出更加强大的RN应用程序。在接下来的文章中,我们将继续深入探讨RN与原生端的交互技术,敬请期待。