JavaScript开发原生移动应用原理及React Native代码解析
React Native 的 JS 运行机制与代码处理细节
首先明确核心问题:React Native 不会把 JavaScript 转换成 iOS/Android 的平台原生语言,而是在打包后的应用里内置了独立的 JavaScript 引擎(iOS 用 JavaScriptCore,Android 默认用 Hermes),JS 代码全程在这个引擎里运行,靠框架的桥接层和原生组件通信。
下面针对你给出的代码,拆解框架幕后的处理逻辑:
1. JSX 里的 <View> 和 <Text> 组件
- 你写的
<View><Text>不是 Web 端的 HTML 标签,而是 React Native 封装的原生组件映射:<View>对应 iOS 的UIView、Android 的ViewGroup<Text>对应 iOS 的UILabel、Android 的TextView
- 编译时,JSX 会被 Babel 转成普通 JS 函数调用,比如
<View style={...}>会变成React.createElement(View, { style: ... }, 子组件) - 运行时,React Native 会把组件的创建/更新请求通过桥接层发给原生端,原生收到后直接创建对应的原生控件并渲染到屏幕上。
2. 样式对象的处理
- 你写的
style={{ flex: 1, justifyContent: 'center', alignItems: 'center' }}这种类 CSS 样式,不会像 Web 那样交给浏览器解析:- React Native 会把这个 JS 对象转换成原生平台能识别的布局属性:
- 比如
flex和justifyContent会映射到 iOS 的 Auto Layout 约束,或是 Android 的 Flexbox 布局规则 - 所有样式最终都会由原生端的样式解析器处理,直接作用在原生控件上,和 Web 的 CSS 渲染逻辑完全无关。
- 比如
- React Native 会把这个 JS 对象转换成原生平台能识别的布局属性:
3. Text 点击事件里的 JS 逻辑
- 点击事件中的
() => { const a = 2 + 2; const b = Math.random(); doSomethingWith(a * b); }这段纯 JS 代码:- 会直接在应用内置的 JS 引擎里执行,和原生代码运行在不同线程(JS 线程 vs 原生主线程)
- 如果
doSomethingWith是纯 JS 逻辑,全程都在 JS 线程里跑;如果它需要调用原生功能(比如访问本地存储、调用相机),就会通过桥接层把请求发给原生端,原生执行完后再把结果回调给 JS 线程。
额外补充:React Native 整体运行流程
- 你的 JS/JSX 代码会被打包成一个单独的 JS Bundle 文件
- 应用启动时,内置的 JS 引擎加载并执行这个 Bundle
- React 负责构建虚拟 DOM,React Native 把虚拟 DOM 转换成原生组件的创建/更新指令
- 桥接层负责 JS 线程和原生线程之间的通信,传递数据和指令
- 原生端执行指令,渲染原生控件,处理原生能力调用
内容的提问来源于stack exchange,提问作者Ardeshir Izadi
相关产品推荐
相关产品推荐

