React Native iOS快速入门与实战
简介:AwesomeProject是一个关于React Native的项目,涵盖在iOS平台上运行React Native应用的详细步骤。React Native是一个开源框架,使用JavaScript和React来构建原生移动应用程序,支持iOS和Android平台。项目提供了iOS模拟器运行示例和入门文档,帮助初学者或跨平台开发者理解框架的工作原理,包括JSX语法、JavaScript与原生代码的桥接,以及如何调试应用。学习过程中了解Objective-C、React Native生命周期、样式系统、组件化开发、网络请求和状态管理等概念,对于深入开发同样重要。
1. React Native简介及其在iOS上的应用
1.1 React Native的诞生与意义
1.1.1 从React到React Native的发展简史
React Native是Facebook开源的框架,它继承了React的声明式UI和组件化架构,但其特色是能够通过JavaScript代码直接编写iOS和Android的原生应用。自2015年发布以来,React Native极大地提高了跨平台移动应用开发的效率和质量,同时降低了开发与维护的成本。
1.1.2 React Native的设计哲学与优势
React Native的核心设计哲学是“Learn once, write anywhere”,这意味着开发者可以用一套代码库开发两个平台的应用。它比其他一些跨平台框架的优势在于性能接近原生应用,因为它的大部分UI组件都是直接使用原生组件构建的。此外,它拥有活跃的社区支持和丰富的第三方库,让开发者可以快速开发并解决特定问题。
1.2 React Native在iOS平台的应用
1.2.1 iOS平台对React Native的支持和限制
在iOS平台上,React Native提供了接近原生的UI体验。iOS的支持使得开发者可以充分利用Swift和Objective-C的生态系统。不过,React Native也有其限制,比如在一些最新的iOS系统特性支持上可能稍显滞后,或者在性能要求极高的场景下可能不如完全用Swift或Objective-C编写的原生应用。
1.2.2 使用React Native开发iOS应用的案例分析
许多知名公司已经在使用React Native开发iOS应用,例如Facebook、Airbnb和Discord等。这些案例表明,React Native在快速迭代、多平台支持和团队协作方面具有显著优势。同时,这些公司往往在性能和用户体验上花费大量精力来优化,从而与原生应用相比,并不逊色。
接下来的章节,我们将详细介绍如何搭建开发环境、创建和管理项目、运行和调试应用,以及更深层次的理解React Native的核心概念和优化技巧。
2. 环境准备和工具安装
2.1 开发环境的配置
2.1.1 必备的开发工具和软件
在着手开发React Native应用之前,开发者需要准备好一些基础的工具和软件。这些工具通常包括:
- Node.js : 作为JavaScript运行时环境,Node.js是React Native构建过程中的核心组件之一,它允许开发者使用JavaScript进行服务器端开发。
- npm (Node Package Manager) : npm是随Node.js一起安装的包管理工具,用于管理依赖项。
- Xcode : Xcode是苹果公司的官方集成开发环境(IDE),是开发iOS应用不可或缺的工具。它提供了代码编辑器、编译器、调试工具以及模拟器。
要安装上述工具,可以从各自官方网站获取安装包并遵循安装指南进行安装。
2.1.2 系统环境变量的设置方法
系统环境变量的设置对于开发者来说是一个重要的配置步骤。环境变量能够帮助操作系统和应用程序找到它们需要的可执行文件路径。例如,你可能需要将Node.js的安装路径添加到系统的PATH环境变量中,以便在任何目录下都能通过命令行调用node和npm。
在MacOS或Linux系统中,可以通过在终端执行以下命令来设置环境变量:
export PATH="/usr/local/bin/node:$PATH"
而在Windows系统中,通常需要通过系统的“高级系统设置”进行环境变量的配置,具体路径为“系统属性” -> “高级” -> “环境变量”。
2.2 React Native开发工具的安装
2.2.1 Node.js和npm的安装与配置
安装Node.js和npm的具体步骤取决于你的操作系统。以下是使用Node.js的包管理工具nvm(Node Version Manager)来安装和管理Node.js版本的一个示例。
首先,你可以从nvm的GitHub页面(https://github.com/nvm-sh/nvm)克隆nvm的仓库到本地:
git clone https://github.com/nvm-sh/nvm.git ~/.nvm
安装完成后,将nvm的初始化脚本添加到你的shell配置文件中(例如 .bashrc , .zshrc ):
# For bash
export NVM_DIR="$([ -z "${XDG_CONFIG_HOME-}" ] && printf %s "${HOME}/.nvm" || printf %s "${XDG_CONFIG_HOME}/nvm")"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm
然后,使用nvm安装最新的Node.js版本:
nvm install node # "node" is an alias for the latest version
2.2.2 React Native命令行工具的安装
安装React Native命令行工具(react-native-cli)是为了能够使用一系列CLI命令,这些命令能够帮助开发者快速搭建项目、运行代码以及与设备进行交互。
安装react-native-cli很简单,可以通过npm进行全局安装:
npm install -g react-native-cli
安装完毕后,你可以通过运行以下命令来验证安装是否成功:
react-native --version
2.2.3 Xcode的安装和配置
虽然安装Xcode不是强制性的(你也可以使用其他支持iOS开发的IDE),但是由于Xcode是最广泛使用的开发工具,我们将以它为例进行说明。
要安装Xcode,你需要前往Mac App Store并搜索“Xcode”来下载安装。下载安装完毕后,你还需要打开Xcode以完成安装过程并同意相关的许可协议。
接下来,为了确保Xcode工具链正确设置,打开Xcode的”Preferences”,转到”Locations”标签页,选择合适的Xcode版本和命令行工具路径。这是确保你的React Native命令行工具能正确调用Xcode命令行接口的关键步骤。
至此,开发环境的配置就完成了。接下来,我们将介绍如何克隆一个React Native项目,并处理项目中的依赖项。
3. React Native项目克隆和依赖安装
在这一章节中,我们将深入探讨如何有效地克隆和初始化React Native项目,以及如何管理项目依赖,确保开发环境的正确配置和应用程序的顺利运行。
3.1 项目克隆与初始化
3.1.1 从版本控制系统克隆项目
在开始一个新的React Native项目之前,通常需要从版本控制系统(如Git)克隆一个现有的项目仓库。这里我们以GitHub为例,介绍如何使用命令行工具克隆项目。
# 克隆项目到本地目录
git clone https://github.com/your-username/your-repo.git
# 进入项目目录
cd your-repo
3.1.2 项目结构概览与初始化流程
一旦项目被克隆到本地,你可以使用 tree 命令(如果系统中没有,请先安装 tree 工具)来查看整个项目的目录结构。在React Native项目中,常见的目录结构应该包括源代码文件夹(如 src 或 app )、 node_modules 、以及配置文件等。
# 如果你的系统中没有tree命令,请安装
# 在Mac上,可以使用 brew install tree
# 在Ubuntu上,可以使用 sudo apt-get install tree
# 显示目录结构
tree
一旦熟悉了项目的结构,你需要初始化项目环境,以确保所有依赖项都安装正确。这通常通过运行特定的初始化脚本来完成。
# 安装项目依赖
npm install
# 或者使用yarn
yarn install
这会根据 package.json 文件中列出的依赖项,自动下载并安装所有必需的模块。
3.2 依赖的安装与管理
3.2.1 依赖安装工具npm和yarn的选择与使用
在React Native项目中,开发者可以根据个人喜好选择 npm 或 yarn 作为包管理工具。以下是使用两种工具安装依赖的对比:
- 使用
npm安装依赖:
npm install <package-name> --save
- 使用
yarn安装依赖:
yarn add <package-name>
这两种工具都支持在项目中添加依赖包。 --save 标志告诉 npm 将包记录在 package.json 文件的 dependencies 部分。 yarn 则默认添加到 dependencies 。
3.2.2 项目依赖的安装、更新与清理
维护依赖项是开发过程中的重要环节。开发者需要定期更新依赖项,以保证应用的安全性和功能的最新性。同时,清理不必要的依赖项可以优化项目的构建时间和性能。
- 安装项目依赖:
# 使用npm安装所有依赖
npm install
# 使用yarn安装所有依赖
yarn install
- 更新依赖项:
# 使用npm更新所有依赖
npm update
# 使用yarn更新所有依赖
yarn upgrade
- 清理无用依赖项:
# 使用npm清理依赖项
npm prune
# 使用yarn清理依赖项
yarn prune
这里, npm prune 和 yarn prune 命令用于删除项目中 package.json 未列出的依赖项。
项目依赖的依赖(子依赖)
当依赖项有进一步的依赖项时,这些被称为子依赖。管理这些子依赖是保持项目稳定的关键。
- 为项目锁定特定版本依赖:
# 使用npm锁定依赖版本
npm shrinkwrap
# 使用yarn锁定依赖版本
yarn.lock
npm shrinkwrap 命令会生成一个 npm-shrinkwrap.json 文件,它记录了项目中所有依赖的精确版本,而 yarn.lock 文件提供了相同的功能。
以上内容为React Native项目克隆和依赖安装的核心步骤。掌握这些内容将为你的开发之旅打下坚实的基础。在下一章节中,我们将深入探讨如何设置iOS项目以及如何使用模拟器进行应用调试。
4. iOS项目设置与模拟器启动
4.1 iOS项目的配置
4.1.1 使用Xcode配置iOS项目
在开始实际配置之前,确保您已经安装了Xcode,这是开发iOS应用不可或缺的工具。安装完成后,打开Xcode并按照以下步骤进行iOS项目的初步配置:
- 打开Xcode,选择 “Create a new Xcode project”。
- 选择 “App” 模板,点击 “Next”。
- 填写项目名称、团队信息、组织名称和组织标识符。确保选择 “Swift” 作为语言和 “Storyboard” 作为用户界面。
- 选择项目的保存位置。
- 最后点击 “Create” 按钮创建项目。
项目创建成功后,您可以开始配置它以适用于React Native:
- 转到项目设置中的 “Signing & Capabilities” 选项卡,确保选择了正确的团队。如果出现自动签名,请检查您的Apple ID是否已正确添加到Xcode中。
- 按照项目的实际需求添加证书和配置文件。
4.1.2 证书与描述文件的创建和配置
在Xcode中创建和配置证书是确保iOS应用能被正确签名并部署到设备或模拟器上的重要步骤。以下是创建和配置证书的步骤:
- 打开Xcode的 “Preferences” 窗口,选择 “Accounts” 标签页。
- 点击左下角的 “+” 按钮添加一个新的Apple ID,或者使用现有的Apple ID登录。
- 然后,选择 “Certificates, Identifiers & Profiles” 在开发者网站上创建必要的配置文件。
- 在 “Identifiers” 页面中创建一个新的App ID。
- 在 “Profiles” 页面中创建一个新的 “Provisioning Profile”。
请确保在创建描述文件时选择了正确的App ID,并包含了需要测试的设备。创建完成后,回到Xcode项目设置中,拖拽或选择刚创建的描述文件,并点击 “Download” 下载对应的证书。
4.2 模拟器的使用与调试
4.2.1 模拟器的启动与运行环境选择
使用Xcode自带的模拟器,开发者可以快速预览和测试应用在不同设备上的表现。启动模拟器并进行运行环境的选择步骤如下:
- 打开Xcode项目后,选择工具栏顶部的 “Simulator” 图标。
- 在模拟器窗口中,选择 “Hardware” -> “Device” 并选择需要测试的iOS设备型号。
- 点击模拟器窗口的 “Play” 按钮来启动iOS模拟器。
在模拟器启动后,您可以通过模拟器的设备选项调整不同的硬件特性,例如位置、网络、电池等,以便更精确地测试应用在特定条件下的行为。
4.2.2 使用模拟器进行应用调试的技巧
在进行应用调试时,Xcode模拟器提供了一些方便的调试工具和技巧:
- 快捷键使用: 比如使用
Command + D可以打开开发者菜单,Command + R则用于重新加载应用。 - 调试控制台: 使用 “Console” 窗口查看应用的运行日志,这对于快速定位问题非常有帮助。
- 断点调试: 在Xcode中设置断点,当应用运行到该点时会自动暂停,便于检查变量值和调用栈。
- 元素检查: 使用 “Debug View Hierarchy” 来检查和交互UI组件。
- 性能分析: 使用 “Instruments” 工具来检测内存泄漏和性能瓶颈。
使用这些技巧可以大大简化调试过程,并有效地提高开发效率。下面是一个具体的调试实例,展示了如何利用模拟器快速找到并解决界面布局问题:
假设您在开发一个使用了自定义字体的表单页面,突然发现界面布局在iOS 13的模拟器上出现了异常。您可以通过以下步骤来诊断问题:
- 启动模拟器: 选择对应iOS版本的模拟器。
- 激活开发者菜单: 使用快捷键
Command + D打开调试菜单。 - 打开调试控制台: 查看是否有相关的错误信息。
- 设置断点: 在可能引发问题的代码段设置断点。
- 逐步执行: 运行应用,并在断点处逐步执行代码,观察应用状态的变化。
- 检查布局: 打开 “Debug View Hierarchy” 工具,选取有问题的视图进行检查。您可能发现某视图的约束条件未按预期设置。
通过以上步骤,您可能会发现该表单组件在iOS 13上应用了错误的约束。随后,您可以针对性地调整布局代码,重新运行模拟器查看问题是否得到解决。
在下一章节中,我们将介绍如何启动React Native应用,使用热重载功能来提高开发效率,以及如何进行应用调试和性能优化。
5. React Native应用运行和调试
5.1 应用的启动与运行
5.1.1 从命令行启动React Native应用
在开发React Native应用的过程中,启动应用是开发周期中的基础步骤。开发者通过简单的命令行操作,就可以使应用在iOS或Android模拟器/设备上运行。以下是一个典型的启动流程示例:
# 切换到项目目录
cd my-react-native-app
# 启动iOS项目(确保已经连接了iOS设备或已安装并配置了模拟器)
react-native run-ios
执行 run-ios 命令后,React Native会构建应用,启动Xcode,并最终在iOS模拟器或真实设备上展示应用。这一过程涉及到多个技术点:
- 构建过程 :React Native利用Metro打包器,将JavaScript代码和资源打包成一个应用。
- 设备选择 :如果存在多个连接的设备或模拟器,系统将提示用户选择一个作为目标设备。
- 应用部署 :代码构建完成后,应用会被部署到选定的设备或模拟器上。
5.1.2 应用热重载与自动刷新功能
React Native提供了热重载(Hot Reloading)和自动刷新(Live Reload)功能,帮助开发者在开发过程中提升效率。
- 热重载 允许开发者在不重启应用的情况下,加载新的代码更改。当开发者保存了对
.js文件的更改后,只需点击热重载按钮,新的代码立即在当前运行的应用中生效,保持应用的状态。 - 自动刷新 则在应用启动时生效,当启动代码更改后,应用会自动重新启动。尽管这样会丢失当前应用的状态,但对于初始化阶段或不依赖于特定状态的更改非常有用。
代码热重载和自动刷新功能,极大地加快了开发和测试的周期,让开发者可以实时看到更改后的效果,是React Native开发中不可或缺的一部分。
5.2 应用的调试与性能优化
5.2.1 使用开发者菜单调试
在React Native应用开发中,开发者菜单是一个非常重要的调试工具。它允许开发者访问各种调试功能,如热重载、自动刷新、启用错误边界等。可以通过以下方式在设备上打开开发者菜单:
- iOS :摇晃设备(如果连接到电脑,则在模拟器中使用
^+Z快捷键)。 - Android :摇晃设备或使用菜单键(如果连接到电脑,使用
^M快捷键)。
开发者菜单中的功能包括:
- 刷新 :类似于开发者工具,可实现热重载或自动刷新。
- 启用红屏错误显示 :让应用在JavaScript抛出错误时显示红屏,方便调试。
- 启用异常捕获 :捕获JavaScript中的异常并显示错误日志。
- 性能监控 :打开性能监控面板,用于分析应用运行时的性能问题。
5.2.2 性能分析工具的使用和优化建议
性能优化是React Native应用开发中重要的一环,确保应用在各种设备上运行流畅是保证用户体验的基础。React Native提供了一些工具来帮助开发者进行性能分析,主要工具包括:
- 性能监控面板(Profiler) :在开发者菜单中可以打开,用于查看应用的帧率(FPS)和渲染时间。
- InApp Developer Menu :iOS特有,可以查看和记录应用的网络请求、性能等信息。
- Chrome DevTools :通过远程调试连接到设备上的React Native应用,利用Chrome提供的开发者工具进行性能分析。
性能优化建议:
- 优化图片和资源 :压缩图片和资源文件大小,减少应用启动时的加载时间。
- 避免JavaScript线程阻塞 :使用异步编程,减少长时间运行的操作,防止JavaScript线程卡顿。
- 减少渲染次数 :合理使用
shouldComponentUpdate、PureComponent或React.memo等技术,减少不必要的组件重渲染。 - 避免不必要的布局计算 :通过合理的设计布局,避免复杂的布局嵌套和频繁的布局更新。
这些优化措施和分析工具的使用,将显著提高React Native应用的性能,提升用户体验。
6. Objective-C和JavaScript桥接理解
6.1 桥接机制的工作原理
6.1.1 Objective-C与JavaScript互操作的原理
React Native使用桥接机制将JavaScript编写的UI组件与原生代码进行连接,这一桥接的核心是允许JavaScript代码调用原生的Objective-C或Swift API。桥接机制通过原生模块(Native Modules)和原生视图(Native Views)实现,为JavaScript提供了一套接口,使其能够访问iOS原生的能力。
在Objective-C与JavaScript的互操作中,主要涉及到几个关键组件:
- React Native Bridge:负责在JavaScript和原生代码之间传递消息的中间件。
- 原生模块:由Objective-C或Swift编写,它们定义了可供JavaScript调用的方法和属性。
- JavaScript桥接:由JavaScript代码编写的桥接对象,负责接收原生模块的消息,并将其转换为JavaScript能理解的形式。
Objective-C与JavaScript的交互流程大致如下:
1. JavaScript代码调用一个定义在原生模块中的方法。
2. React Native Bridge将该调用转换为原生环境能理解的消息。
3. 原生模块接收到消息并执行相应的Objective-C或Swift代码。
4. 如果需要,原生模块可以将数据或结果通过React Native Bridge发送回JavaScript环境。
6.1.2 桥接过程中数据类型与转换
在桥接过程中,数据类型需要在JavaScript和Objective-C之间进行转换,以保证两者可以互相理解。React Native为此提供了一套类型映射规则,下面是一些基本的映射关系:
- JavaScript的字符串、数字和布尔值直接映射为Objective-C的NSString、NSNumber和BOOL。
- JavaScript数组映射为NSArray,对象映射为NSDictionary。
- JavaScript中的null和undefined在Objective-C中对应为nil和NSNull。
- JavaScript中的日期对象映射为NSDate。
- JavaScript中的回调函数通过RCTResponseSenderBlock在原生代码中被实现。
桥接过程中类型转换的示例代码如下:
// JavaScript端
nativeModule.doSomethingWithNumber(42, (result) => {
console.log(result);
});
// Objective-C端
RCT_EXPORT_METHOD(doSomethingWithNumber:(NSNumber *)number callback:(RCTResponseSenderBlock)callback) {
// 执行一些原生操作
int result = [self nativeOperationWithNumber:number];
// 将结果转换回JavaScript能理解的形式
callback(@[[NSString stringWithFormat:@"%d", result]]);
}
6.2 桥接的应用实践
6.2.1 从JavaScript调用Objective-C方法
在React Native应用中,从JavaScript调用Objective-C方法是常态。开发者通常通过创建原生模块来实现这一功能。这里的关键步骤是定义模块中的方法和JavaScript所期望的参数及回调。
桥接的应用实践步骤可以总结为:
- 在Objective-C中创建一个原生模块类。
- 使用RCT_EXPORT_METHOD宏来定义可供JavaScript调用的方法。
- 在JavaScript中引入原生模块,并使用require(‘react-native’).NativeModules获取。
- 调用原生模块的方法并传递参数,如果需要的话,处理回调函数。
6.2.2 在Objective-C中使用JavaScript代码
在特定的场景下,原生代码可能需要调用JavaScript代码来执行一些操作。这通常涉及到在Objective-C代码中执行JavaScript代码。可以通过RCTJavaScriptExecutor类来实现这一操作。
实现步骤如下:
- 创建一个RCTJavaScriptExecutor实例。
- 使用executeScript:方法执行JavaScript代码字符串。
- 处理JavaScript执行的结果,这通常涉及到回调函数的实现。
请注意,由于JavaScript是在JavaScriptCore中运行,这一操作只在主线程的事件循环中是安全的。使用示例如下:
// Objective-C端
RCTJavaScriptExecutor *executor = [[RCTJavaScriptExecutor alloc] initWithBridge:bridge];
[executor executeScript:@"console.log('Hello from JavaScript!')" withCompletionHandler:^(NSArray *result) {
// 处理回调
}];
通过以上示例可以看出,桥接机制的原理和应用实践都是围绕着如何在不同的编程环境中实现通信和协作。理解并熟练使用桥接机制,对于开发高效且功能丰富的跨平台应用是至关重要的。
7. React Native核心概念学习
7.1 声明式UI与组件化
7.1.1 声明式UI的原理与实践
React Native采用的是声明式UI,它是一种编程范式,其中开发人员描述UI应有的状态,而不是实现状态如何变化的具体步骤。与命令式编程不同,声明式编程更关注于结果而非过程,这使得代码更易于理解且更易于维护。在React Native中,UI是通过JavaScript中的组件来声明的,每个组件描述了它在不同状态下的输出。这种做法极大地简化了UI的构建过程,因为开发者只需要声明一次,剩下的就是框架的职责,框架会负责根据状态变化来更新UI。
7.1.2 React Native的组件化编程模式
React Native的组件化编程模式极大地促进了代码的可复用性和可维护性。组件可以是简单的按钮,也可以是复杂的屏幕界面。组件可以有自己的样式、状态和生命周期,甚至可以包含其他组件。这种自下而上的构建方式,使得开发者可以在项目中创建一个组件库,它们可以被复用在不同的地方,并且可以独立于应用程序的其他部分进行维护和更新。组件化也方便了团队协作,可以将不同的组件分配给不同的开发者进行开发。
7.2 状态管理与生命周期
7.2.1 组件状态管理的策略与实践
组件状态管理是React Native应用开发中的核心概念之一。组件的状态(state)类似于一个对象,它包含了组件的动态数据和属性。当状态改变时,组件会自动重新渲染。React Native使用了单向数据流的原则来管理状态,这有助于追踪数据变化的原因,并简化调试过程。常见的状态管理策略包括使用 useState 和 useReducer 钩子函数来管理本地状态,或者使用更高级的状态管理库如Redux或MobX来管理全局状态。
7.2.2 组件生命周期方法的应用场景
React Native的组件生命周期方法描述了组件在其生命周期中每个阶段的行为。生命周期方法如 componentDidMount 、 componentDidUpdate 和 componentWillUnmount 提供了在组件挂载、更新和卸载时执行特定操作的机会。例如, componentDidMount 通常用于执行初始化操作,如网络请求或订阅事件,而 componentWillUnmount 则用于执行清理操作,如取消订阅。使用生命周期方法可以帮助开发者更好地控制组件的行为和性能优化。
7.3 核心API与模块
7.3.1 React Native核心API的使用方法
React Native的核心API包括了一系列的组件和函数,它们允许开发者创建原生用户界面。核心API覆盖了各种UI元素,如视图(View)、文本(Text)、图像(Image)等。开发者可以使用这些组件快速构建丰富的用户界面,并通过属性(props)来定制组件的行为和样式。例如,使用 TextInput 组件可以创建输入框,并通过 onChangeText 属性来监听文本变化事件。核心API还包括了与设备交互的功能,如 Dimensions 获取设备屏幕尺寸, CameraRoll 访问相册等。
7.3.2 常用模块与扩展库的介绍
为了满足不同的开发需求,React Native社区已经创建了大量的模块和扩展库。这些库可以帮助开发者快速实现复杂的功能,例如,使用 react-navigation 库可以轻松实现应用内的导航功能,而 redux 库可以帮助管理应用的全局状态。一些扩展库,如 axios 用于网络请求, realm 用于本地数据库操作,极大丰富了React Native应用的功能。使用这些库时,开发者需要遵循相应的安装和配置步骤,并确保它们与React Native版本兼容。
简介:AwesomeProject是一个关于React Native的项目,涵盖在iOS平台上运行React Native应用的详细步骤。React Native是一个开源框架,使用JavaScript和React来构建原生移动应用程序,支持iOS和Android平台。项目提供了iOS模拟器运行示例和入门文档,帮助初学者或跨平台开发者理解框架的工作原理,包括JSX语法、JavaScript与原生代码的桥接,以及如何调试应用。学习过程中了解Objective-C、React Native生命周期、样式系统、组件化开发、网络请求和状态管理等概念,对于深入开发同样重要。
更多推荐



所有评论(0)