我是一名iOS开发者,由于工作需要,接触React Native到现在也有一年多了,我发现网络上知识资源非常的多,但是能让人豁然开朗、迅速学习的还是少数,我整理出的这些文章对于初学者来说是比较有好的,希望通过整理我的学习路线,能给同样作为iOS开发者,想学习React Native的朋友们一些帮助。
既然是写给iOS开发者的,那么我默认你已经掌握iOS原生应用开发的基本知识,所以对iOS原生开发的相关内容不做解释说明。
其实作为一个开发者有一个学习的氛围跟一个交流圈子特别重要,这是我的一个iOS交流群 778994086,不管是小白还是大牛都欢迎入驻,大家一起交流成长!
React Native概念介绍
名词解释
首先列举几个关键词:
React
Native
React Native
这三个词其实没有太大关系,我们逐个来解释:
React:近几年Web前端领域非常火热的一个开发框架React.JS,其核心思想是将视图组件化,通过更新组件的state来渲染出组件。
Native:这个词从字面理解就够了,就是指原生的。前几年有个非常火热的跨平台开发框架PhoneGap(现称Cordova),那就不是原生的开发方式。原生就要使用对应平台的特定语言和框架进行开发,比如使用Objective-C或Swift开发的iOS应用。
React Native:结合了这两个词,我们可以简单地得到结论:使用React框架进行原生方式的开发。
实现原理
我们都知道在iOS平台上,苹果提供了一个JavaScriptCore的framework,可以进行JavaScript语言的解析,React Native通过多次封装定义,最终实现了在JavaScript语言中调用Objective-C的类和方法。具体的原理我们现在还不必深究,后文的学习路线中会有提到。
所以既然是调用Objective-C的类和方法,性能上当然是不差的(但也不完美),所以这也是React Native相比其他跨平台开发方式的一大优势。
评价
跨平台:目前React Native官方已经支持iOS、Android两个平台的移动设备,民间也有一些大牛在做macOS、tvOS,甚至UWP平台的适配。但由于不同平台特性不同,并不能一份代码在所有平台上直接运行,React Native的思想是「Learn once, write anywhere」,我们需要针对不同平台的特性写出不同的代码,尽量保持组件的高可复用性。
性能:官方宣称性能堪比Native,实际使用中我们会发现几个问题,比如复杂视图渲染出View层级过多、ListView(等同于iOS上的UITableView)无重用机制、有些组件存在内存泄露。这就会导致在部分低端Android机型上的性能过差,复杂的、大型的应用会有明显性能问题。
热更新:由于App Store应用商店发版迭代效率问题,热更新成为了iOS平台非常渴求的功能,可喜的是React Native的热更新能力非常好,通过将JavaScript代码部署到服务器中,运行过程中即可重新reload整个界面。
学习成本:对于iOS开发者来讲,要了解相当数量的Web前端开发知识才可以进行开发,对于Web前端开发者来讲,对于原生性能调优则需要原生开发知识和经验,所以说学习成本略高。
开发效率:Android和iOS平台可复用很多组件,仅部分代码需要各自平台分别维护,所以比开发两个平台原生应用效率要高得多。加上本身可动态渲染的能力,不用重新编译,Command⌘+R即可重新渲染界面,开发效率更是惊人地快。
学习路线
搭建环境
React Native 包管理器同时用到了 node和watchman,并采用了同为 Facebook 出品的flow作为类型检查库,因此我们将在 macOS 下使用Homebrew进行相关依赖的安装。
针对不同平台安装 Xcode 或 Android Studio 开发环境
创建一个新的应用
使用 React Native 命令行工具创建一个模板工程
按项目创建的成功提示运行应用
== 若运行出错,可尝试在工程目录下重新运行 npm install和npm start==
配置部署到 iOS 设备
登录开发者账号 -> 注册 iOS 设备 UUID -> 在AppDelegate.m中配置 React Native 文件地址
探索示例代码
摸索一下命令行工具生成的默认工程项目代码吧~
添加组件
模块导入
开发过程中,我们需要导入所需的每一个组件或模块
视图样式组件
熟悉HTML这样的结构化标记语言的话,这段代码不难理解,表达了视图中的组件结构
React Native 中所有样式都采用样式对象来代替传统样式表,通常使用StyleSheet库来创建组件样式。
大家觉得小编写的还不错的话,可以点一波收藏跟关注!也可以加入我的一个iOS交流群 778994086,不管小白还是大牛,大家一起学习成长!