![React Native移动开发实战](https://wfqqreader-1252317822.image.myqcloud.com/cover/597/22655597/b_22655597.jpg)
2.2 React Native项目结构剖析
在React Native项目中,由于项目同时支持Android和iOS,所以我们会看到完整的Android和iOS项目结构。我们可以通过Android Studio和Xcode来打开相应的项目,在混合开发的时候,往往需要对原生的代码进行编辑,这时候,打开Android Studio和Xcode编写差异化代码即可。
2.2.1 React Native文件结构
当新建一个React Native项目后,使用IDE打开后看到的项目目录结构如图2-19所示。
![](https://epubservercos.yuewen.com/C82B4B/11229194304794906/epubprivate/OEBPS/Images/figure_0031_0001.jpg?sign=1739231089-TgSr3TwIRj9RaqqPrkX9ldvwQat12jU2-0-b16e97c6e00efa6e04dfca77d3a4ca1e)
图2-19 React Native项目结构
React Native项目文件组成及相关说明见表2-1。
表2-1 React Native文件表
![](https://epubservercos.yuewen.com/C82B4B/11229194304794906/epubprivate/OEBPS/Images/figure_0031_0002.jpg?sign=1739231089-lRgFcv27JuEB4mvvKuY0alf4XuPYsw1A-0-fd71353a3a0ff397bad53dd99438aa9a)
其中index.android.js和index.iOS.js文件分别为Android和iOS的启动入口文件。React Native项目中所依赖的第三方库则被统一放在node_modules文件夹下,由package.json进行统一管理。
2.2.2 iOS文件结构及代码分析
React Native项目中,同时包含Android和iOS, iOS的项目结构和原生的项目结构一致,其项目结构如图2-20所示。
![](https://epubservercos.yuewen.com/C82B4B/11229194304794906/epubprivate/OEBPS/Images/figure_0032_0001.jpg?sign=1739231089-JltLuvbCzfvGNvPVj5XQTAPI0wBSqFHI-0-aae351d8b9afd91803706bc625ae3274)
图2-20 iOS项目结构
React Native文件iOS目录如表2-2所示。
表2-2 iOS文件表
![](https://epubservercos.yuewen.com/C82B4B/11229194304794906/epubprivate/OEBPS/Images/figure_0032_0002.jpg?sign=1739231089-JBCH0Z9C7vxNV3346nNHoeXTl9tavYMf-0-2487cda793883e9dbe8c8e92708233f3)
或许,读者会有疑问,在index.ios.js注册启动文件后,iOS是如何启动原生视图的呢?答案在APPDelegate.m文件中。打开APPDelegate.m,在APPDelegate.m中声明的根视图中有如下代码:
RCTRootView *rootView = [[RCTRootView alloc] initWithBundleURL:JSCodeLocation moduleName:@"Shop" initialProperties:nil launchOptions:launchOptions];
React Native库将其所有的类名使用RCT作为前缀,也就是说RCTRootView其实是React Native的类。而在iOS中,RCTRootView表示React Native的根目录。APPDelegate.m通过将视图添加到UIViewCotroller中并渲染到屏幕上。例如,在本示例项目中,打开index.ios. js,在最后一行看到代码中暴露Shop组件,从而完成渲染工作。相关代码如下:
APPRegistry.registerComponent('Shop',()=> Shop);
2.2.3 Android文件结构及代码分析
在React Native中,Android的项目结构和原生应用项目结构是一致的,其项目目录结构如图2-21所示。
![](https://epubservercos.yuewen.com/C82B4B/11229194304794906/epubprivate/OEBPS/Images/figure_0033_0001.jpg?sign=1739231089-ADO4oB8gLU1wLjKalExCfBj1GzwJ4z4m-0-d3a1fb5772a7bd9ea12ee9f51258d624)
图2-21 Android项目结构
Android项目文件及说明如表2-3所示。
表2-3 Android文件表
![](https://epubservercos.yuewen.com/C82B4B/11229194304794906/epubprivate/OEBPS/Images/figure_0033_0002.jpg?sign=1739231089-0GuDBLyBoNzmq1YcqlWnjXJlbwbhoDBQ-0-c86545e502b93af3e8bfa412a41bf42e)
index.android.js作为Recott Ncotive项目Andrad端的启动入口,是如何启动原生视图的呢?正如APPDelegate.m之于iOS, Android的入口在MainActivity文件中,其核心的方法在getMainComponentName()中:
protected String getMainComponentName(){ return "Shop"; }
除了上面介绍的文件外,React Native项目中所依赖的包都会统一放在node_modules文件夹下。关于使用React Native进行混合开发过程中的一些细节,后面章节将慢慢介绍。