![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=1738886036-iymd1JBTnhInn0YnRvo3GSFhVwk2H6Th-0-1e27dfb7e8dd247a4f248d2630c5bd4d)
图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=1738886036-NizHVLCS6qyUyGf7CTBnFvIdKm7Zp5SZ-0-db0ea3091435c16a7d4afc134c225bfb)
其中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=1738886036-Cl9D7ruy6bUEv2d0QpwNEKJB7odQ4yDV-0-7178da47a621e6d77d85adfdaaf87ec1)
图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=1738886036-dZukwqV0JnSMLsaKgRCwQ5SsMPQEw11a-0-55ae7ae3cffd231134c71e18fc5ed578)
或许,读者会有疑问,在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=1738886036-iGVgd0apukfePKNjXJy0bSG2gIqJtozP-0-b59afc52bbac9ba7548f247cebc77456)
图2-21 Android项目结构
Android项目文件及说明如表2-3所示。
表2-3 Android文件表
![](https://epubservercos.yuewen.com/C82B4B/11229194304794906/epubprivate/OEBPS/Images/figure_0033_0002.jpg?sign=1738886036-T3v4mOoFpyJPgFjGJiPg1LGdYOnTGxJD-0-5b8ef2a05d5527fae1913d29b9f2b5a6)
index.android.js作为Recott Ncotive项目Andrad端的启动入口,是如何启动原生视图的呢?正如APPDelegate.m之于iOS, Android的入口在MainActivity文件中,其核心的方法在getMainComponentName()中:
protected String getMainComponentName(){ return "Shop"; }
除了上面介绍的文件外,React Native项目中所依赖的包都会统一放在node_modules文件夹下。关于使用React Native进行混合开发过程中的一些细节,后面章节将慢慢介绍。