react native 源码编译-带你走进ReactNative启动流程和通信机制

什么是 React Native?

ReactNative(简称RN)是Facebook于2015年4月开源的跨平台联通应用开发框架react native 源码编译,是Facebook原创开源JS框架React在原生联通应用平台上的衍生产品。 它支持iOS和Android平台。 RN使用Javascript语言、类似HTML的JSX以及CSS来开发联通应用,因此熟悉Web后端开发的技术人员只需很少的学习就可以步入联通应用开发领域。 可以称为:Learnnonce、writeanywhere

来源官网:

ReactNative主要特点:

谁在使用 React Native? 从ReactNative的官网我们可以看到以下公司正在使用或者曾经使用过ReactNative的结构。

ReactNative是如何加载和执行的?

首先,编写一段非常简单的ReactNative代码:

当iOS客户端启动时,通过执行以下代码加载ReactNative的根视图

程序运行后,你会看到右边的界面,这是一个带有原生视图的应用程序!

只需十几行代码,就可以实现一个带有原生视图的应用程序,这真是太神奇了。 那么你会问,这么简单的几行代码如何驱动底层并生成原生应用程序呢? 尽管如此,ReactNative 框架和工具集为您完成了大部分工作。

通过对脚本进行打包编译,编译出来的JSBundle文件非常大。 至于昨天的代码,编译出来的JSBundle足有645KB,上面的内容非常复杂。

react-native bundle --platform ios --entry-file index.js --bundle-output ./bundle/ios/index.ios.bundle --dev false

在讲JSBundle加载之前,我们需要先了解一下ReactNative的核心驱动JavaScriptCore

JavaScript 核心有哪些?

ReactNative的核心驱动力来自于JSEngine。 所有 JS 和 JSX 代码都将由 JSEngine 执行。 在iOS上react native 源码编译,默认的JSEngine是JavaScriptCore,iOS7之后的设备都支持它。 JavaScriptCore源自WebKit,因此Android上也默认使用JavaScriptCore。 JavaScriptCore是一个JavaScript虚拟机,为JavaScript执行提供底层资源。 在浏览器中,位置如下:

JavaScriptCore主要由以下几个模块组成:

下面以IOS客户端的启动为例,讲解ReactNative的启动和加载过程

第一阶段,【创建RCTRootView】->【创建RCTBridge】->【调用【RCTCxxBridgestart】

1.创建JS线程

2.初始化NativeModule

3.创建executorFactory

4.在js线程中初始化通信桥

6.运行js文件(将加载的JS文件交给JSCore解析执行)

第 2 阶段:创建 ContentView 并加载应用程序

一种是创建 RCTRootContentView,向视图添加手势识别器,然后在bridge.uiManager 中注册自身。

第二个是加载应用程序

 [bridge enqueueJSCall:@"AppRegistry"method:@"runApplication"args:@[moduleName, appParameters]completion:NULL];

执行完毕后,执行bounce方法callNativeModules,最终弹跳到native模块

关键的 JavaScript 类 AppRegistry。

AppRegistry是所有ReactNative应用程序的JS入口。 应用程序的根组件应该通过AppRegistry.registerComponent注册自身,然后原生系统可以在启动完成后调用AppRegistry.runApplication来加载应用程序的代码包并运行应用程序。

1.ReactNative代码,定义App,并注册

AppRegistry.registerComponent的代码实现

iOS客户端启动程序并运行对应的ReactNative应用程序

AppRegistry.runApplication 的实现

总体来说,ReactNative的技术框架如下:

ReactNative的通信机制

1.ReactNative页面调用native方式

在Native中,编写一个实现“RCTBridgeModule”协议的Objective-C类

通过RCT_EXPORT_METHOD宏,曝光方法

2. Native方式通知ReactNative页面

在Native代码中,定义一个继承自RCTEventEmitter的类

当原生代码需要通知ReactNative页面时,通过sendEventWithName:body:将事件和参数广播到ReactNative页面。

其实ReactNative页面需要为用户注册,代码如下:

参考:

RN源代码:

RN官方文档(入门):

英语:

ReactNative源码分析--IOS客户端启动流程(从OC到JS):

ReactNative分析:

JavaScriptCore综合分析:

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

悟空资源网 源码编译 react native 源码编译-带你走进ReactNative启动流程和通信机制 https://www.wkzy.net/game/171127.html

常见问题

相关文章

官方客服团队

为您解决烦忧 - 24小时在线 专业服务