新書推薦:
《
治盗之道:清代盗律的古今之辨
》
售價:HK$
125.4
《
甲骨文丛书·剑桥世界暴力史(第一卷):史前和古代世界(套装全2册)
》
售價:HK$
210.6
《
甲骨文丛书·中华早期帝国:秦汉史的重估
》
售價:HK$
300.2
《
欲望与家庭小说
》
售價:HK$
101.2
《
惜华年(全两册)
》
售價:HK$
72.2
《
甲骨文丛书·古代中国的军事文化
》
售價:HK$
99.7
《
中国王朝内争实录(套装全4册):从未见过的王朝内争编著史
》
售價:HK$
250.7
《
半导体纳米器件:物理、技术和应用
》
售價:HK$
181.7
|
編輯推薦: |
《React Native跨平台移动应用开发(第二版)》编辑推荐
本书配套的GitHub文档持续更新中,保证书中知识在zui新版本RN中可用。
迄今为止,真正意义上的React Native跨平台开发原创图书。
本书架构是作者精心设计的,适合初学者入门,本次升级用 ES6语法写。
本书所有例程均是原创的,并且在代码旁有注释解说。
|
內容簡介: |
React Native是Facebook公司推出的强大的、开源的跨平台移动应用开发框架。它能大幅减少跨平台移动应用开发的工作量(相比原生代码开发能减少至少50%),并且代码结构清晰、简单易懂。同时React Native框架采用模块化的结构,使应用版本的更新迭代非常简单。随着它的日趋成熟,React Native必然会成为移动应用开发的主流技术。本书由浅入深,系统发介绍了使用React Native框架跨平台开发所需要用到的知识。本书每一章都专注于阐述移动应用开发某一方面的知识,配合若干个原创的、精简的例程,能让读者系统、快速地掌握该方面知识。本书的结构是按一个有基本的编程基础知识,刚学习JavaScript基本语法的读者的*学习路径来编写的。有一定基础的开发人员也可以将本书作为一本React Native开发的“字典”来使用,在开发时可以快速查找相关知识点的细节。希望通过本书,能将*的React Native开发技术介绍给国内广大开发者,让国内移动应用开发进入一个新的时代,让开发者用比较少的精力就能高效、美观地完成移动应用开发。
本书中的6.5节、第11章、14.5节都是笔者精心整理调研出来的技术,能让更多的开发者享受到React Native开发的便利性。
加入了React Native一年以来的新能力:
1、RN项目在iOS 10手机上的配置启动过程;
2、RN项目断点调试的使用方法;
3、手机中图片剪切、通过网络上传;
4、RN开源社区介绍与知名开源组件介绍;
5、Modal组件与Navigator组件的配合使用;
6、网络部分增加了测试服务器的搭建与介绍,让读者更方便掌握RN的网络开发;
7、推送能力、打开外部链接与从外部链接打开RN应用能力
8、新组件:ActivityIndicator、PermissionsAndroid、Slider、Vibration;
9、原各RN组件从0.28到0.42期间新增的属性与方法介绍。
|
關於作者: |
阙喜涛湖南省吉首市人,北京邮电大学研究生,专注智能手机应用开发十一年,现任华熙现场科技有限公司移动应用研发总监。先后参与开发过中国移动POC系统、贵州移动一卡多号系统、浙江移动应用商店系统、华熙Live APP等。
|
目錄:
|
第1章 React Native 1
1.1 React Native开发特点 2
1.1.1 一次学习,随处编写 2
1.1.2 混合开发 2
1.1.3 高效的移动应用开发 3
1.1.4 高效的移动应用开发调试 4
1.1.5 灵活高效的应用热更新 4
1.1.6 有效降低移动应用安装包体积 5
1.1.7 学习门槛低、开发难度低 5
1.1.8 开发软硬件要求低 6
1.1.9 使用React Native开发的代价 6
1.2 React Native开发环境搭建 7
1.2.1 开发环境搭建起点 8
1.2.2 Windows操作系统下React Native开发环境搭建 8
1.2.3 苹果操作系统下React Native开发环境搭建 10
1.2.4 查看与删除使用npm命令安装的软件 11
1.3 代码编辑环境搭建 11
1.3.1 Visual Studio Code 11
1.3.2 Sublime Text 3 11
1.3.4 WebStorm 13
1.4 键盘使用习惯 13
1.5 React Dev Tools安装 14
第2章 状态机思维与状态机变量 17
2.1 初始化项目 17
2.1.1 初始化RN最新版项目 17
2.1.2 初始化RN旧版本项目 18
2.2 运行项目 19
2.2.1 使用Android手机调测准备事项 19
2.2.2 第一次运行Android平台RN项目 19
2.2.3 再次在Android平台运行RN项目 21
2.2.4 使用iPhone设备调试注意事项 22
2.2.5 首次在iOS平台运行RN项目 23
2.2.6 再次在iOS平台运行RN项目 27
2.2.7 Sublime Text 3对JSX语法的支持 27
2.2.8 修改JSX代码 28
2.2.9 启动调试工具 30
2.2.10 使用ADM工具调试 35
2.3 构建登录页面 37
2.4 React Native代码执行逻辑 41
2.5 UI框架工作基本机制 41
2.5.1 状态机思维 42
2.5.2 “冒充常量”的状态机变量 44
2.5.3 “无处安放”的状态机变量 45
2.5.4 “努力瘦身”的状态机变量 46
2.6 React Native组件间通信 46
2.7 深入理解UI重新渲染的过程 47
2.7.1 合并状态机变量 47
2.7.2 判断是否渲染 49
2.7.3 强制启动渲染 50
2.7.4 渲染过程 50
2.7.5 合并状态机变量的最简语法 50
2.8 React Native组件的成员变量 51
2.9 React Native组件的静态变量、静态函数 52
2.10 组件回调函数的绑定 52
第3章 页面导航、弹出框及深入理解属性 55
3.1 分离注册组件、组件平台自适配 55
3.1.1 分离注册组件 55
3.1.2 组件平台自适配 55
3.1.3 平台检测 56
3.2 导航组件、挂接注册组件 56
3.3 挂接注册等待组件 58
3.4 Navigator组件 61
3.4.1 push与pop 61
3.4.2 replace函数 62
3.5 React Native中颜色类型的值 62
3.6 BackAndroid API 63
3.7 属性确认 63
3.8 指定属性默认值 66
3.9 Alert应用程序编程接口 66
3.9.1 弹出确认框 66
3.9.2 弹出选择框 67
3.10 带导航栏的页面导航 69
第4章 混合开发基础篇 70
4.1 iOS平台混合开发 70
4.1.1 与iOS 侧原生代码消息互通 71
4.1.2 React Native代码到iOS原生代码的消息 72
4.1.3 iOS 原生代码到React Native代码的消息 75
4.1.4 与iOS OC原生代码界面切换 77
4.1.5 应用初始界面设定 77
4.1.6 iOS混合开发中传递的参数类型 78
4.1.7 混合开发中的多线程使用 78
4.1.8 原生代码实现Promise机制 79
4.1.9 跨语言常量 82
4.2 Android平台混合开发 82
4.2.1 与Android原生代码消息互通 83
4.2.2 React Native代码到Android原生代码的消息 84
4.2.3 与Android原生代码界面的切换 87
4.2.4 Android原生代码到React Native代码的消息 91
4.2.5 应用初始界面设定 94
4.2.6 传递的参数类型 94
4.2.7 回调函数与Promise机制 95
4.2.8 监听ActivityResult与Android生命周期事件 97
4.2.9 混合开发中的多线程机制 98
4.2.10 跨语言常量 98
第5章 flexbox布局、View、Image与可触摸组件 100
5.1 flexbox布局 100
5.1.1 位置及宽、高相关样式键 102
5.1.2 决定子组件排列规则的键 102
5.1.3 决定组件显示规则的键 106
5.1.4 边框、空隙与填充 109
5.1.5 zIndex 110
5.1.6 组件多样式声明与动态样式声明 110
5.2 View组件 111
5.2.1 View组件的颜色与边框 111
5.2.2 View组件的阴影与其他视觉效果 113
5.2.3 View组件的变形 114
5.2.4 View组件的回调函数 117
5.2.5 View组件的其他属性 119
5.2.6 设备放置状态、根View与onLayout回调函数 120
5.2.7 pointerEvents属性 123
5.3 Image组件 125
5.3.1 加载网络图片 125
5.3.2 加载静态图片资源 127
5.3.3 加载资源文件中的图片 128
5.3.4 动态加载手机中的图片资源 129
5.3.5 Image组件的样式 129
5.3.6 Image组件显示特性 131
5.3.7 Image组件的其他属性 134
5.3.8 Image组件的缓存 134
5.3.9 尽量使用网络图片 135
5.4 可触摸组件 135
5.4.1 可触摸组件类型 135
5.4.2 TouchableOpacity组件 136
5.4.3 TouchableHighlight组件 137
5.4.4 其他属性 138
5.5 使用导航栏的导航框架 139
5.5.1 导航栏自定义组件的实现 140
5.5.2 调用自定义组件 142
第6章 Text、TextInput等相关知识 145
6.1 Text组件 145
6.1.1 样式键设置 145
6.1.2 其他属性 147
6.1.3 Text组件的嵌套 149
6.1.4 文本显示的阴影效果 150
6.1.5 Text居中显示 151
6.1.6 在字符串中插入图像 153
6.2 Text组件在两个平台上的不同表现 155
6.2.1 只指定fontSize,不指定height 155
6.2.2 只指定height,不指定fontSize 156
6.2.3 fontSize等于height 156
6.2.4 height大于fontSize 156
6.2.5 边框在两个平台上的不同表现 157
6.3 TextInput组件 158
6.3.1 TextInput组件样式键 158
6.3.2 TextInput组件的属性 158
6.3.3 TextInput组件iOS平台专有属性 160
6.3.4 TextInput组件Android平台专有属性 161
6.3.5 TextInput组件的成员函数 161
6.4 TextInput组件在两个平台上的不同表现 161
6.4.1 Android平台的输入下画线 162
6.4.2 父组件的alignItems键失效 162
6.4.3 只指定fontSize,不指定height 164
6.4.4 height等于fontSize 164
6.4.5 height大于fontSize 164
6.4.6 边框在两个平台上的不同表现 165
6.5 TextInput组件的生命周期 165
6.5.1 获得焦点 165
6.5.2 用户输入 166
6.5.3 用户按下提交键 166
6.5.4 失去焦点 166
6.5.5 生命周期中的其他事件 167
6.6 Keyboard API、软键盘与键盘事件 168
6.6.1 Keyboard API 168
6.6.2 键盘事件处理例程 168
6.7 组件的引用 171
6.7.1 定义组件引用 171
6.7.2 得到系统定义的组件引用 171
6.7.3 调用组件的公开成员函数 172
6.7.4 重新设定组件的属性 172
6.7.5 获得组件的位置 174
6.8 跨平台状态栏组件 175
6.8.1 StatusBar组件属性 175
6.8.2 StatusBar组件使用示例 176
6.8.3 手机状态栏在开发中的处理 176
6.9 高度自增长的扩展TextInput组件 177
6.10 访问操作系统剪贴板 179
第7章 组件生命周期、数据存储及React Native应用实现步骤 182
7.1 组件生命周期 182
7.1.1 constructor 182
7.1.2 componentWillMount 182
7.1.3 componentDidMount 183
7.1.4 componentWillReceiveProps 183
7.1.5 shouldComponentUpdate 183
7.1.6 componentWillUpdate 184
7.1.7 componentDidUpdate 184
7.1.8 componentWillUnmount 184
7.2 读取JSON文件 185
7.3 数据持久化操作 186
7.3.1 写入数据、错误捕捉 186
7.3.2 读取数据 188
7.3.3 AsyncStorage API存储数据的无序性 190
7.3.4 删除数据 191
7.3.5 修改数据 192
7.3.6 JSON对象存储 192
7.3.7 读取JSON对象 193
7.4 数据表操作 193
7.5 React Native应用实现步骤、日记例程(上) 193
7.5.1 应用原型 194
7.5.2 基础组件结构设计 195
7.5.3 使用React Native组件搭建静态界面 197
7.5.4 React Native组件分层 204
7.5.5 实现各组件业务逻辑 206
7.5.6 日记例程(上)总结 206
第8章 ScrollView和ListView 218
8.1 ScrollView组件 218
8.1.1 ScrollView组件属性 218
8.1.2 ScrollView组件iOS平台专有属性 219
8.1.3 ScrollView组件Android平台专有属性 220
8.1.4 ScrollView组件的公开成员函数 221
8.1.5 RefreshControl组件 221
8.1.6 ScrollView组件基本用法 222
8.2 ListView组件 224
8.2.1 ListView组件的回调函数 225
8.2.2 ListView组件的其他属性 226
8.2.3 ListView组件的成员函数 226
8.3 简单的列表 226
8.3.1 准备列表的数据源 227
8.3.2 声明状态机变量 227
8.3.3 将数据源中的数据复制到DataSource中 228
8.3.4 定义如何渲染列表中的每一行 228
8.3.5 实现简单的列表 229
8.3.6 列表栏的高级处理 237
8.4 带分段标志的列表 237
8.4.1 准备数据源 238
8.4.2 声明状态机变量 238
8.4.3 将数据源中的数据复制到DataSource中 239
8.4.4 定义如何渲染每个分栏 240
8.4.5 定义如何渲染首、尾栏 240
8.4.6 列表间隔渲染 240
8.4.7 实现带分段标志的列表 241
8.4.8 总结 241
8.5 日记例程(下)总结 241
第9章 等待提示、进度条和Switch 242
9.1 ActivityIndicator组件 242
9.1.1 ActivityIndicator组件样式设置 242
9.1.2 ActivityIndicator其他属性 242
9.1.3 等待提示例程 242
9.2 iOS进度条组件 243
9.2.1 React Native框架中定时器的使用 243
9.2.2 ProgressViewIOS组件样式设置 244
9.2.3 ProgressViewIOS其他属性 244
9.2.4 iOS平台进度条 245
9.3 Android平台进度条组件 246
9.4 Switch组件 246
9.4.1 Switch组件样式设置 246
9.4.2 Switch其他属性 246
9.4.3 Switch组件的使用 247
第10章 导航组件与Modal 249
10.1 导航组件的属性 249
10.1.1 回调函数 249
10.1.2 其他属性 250
10.2 导航器 250
10.3 NavigationBar 251
10.4 导航例程 252
10.5 Modal组件 257
10.6 Modal组件与Navigator组件的配合 258
10.7 Modal组件例程 258
10.7.1 实现自定义Modal组件 258
10.7.2 使用自定义Modal组件 260
10.7.3 Modal组件与Alert组件 262
10.7.4 总结 262
第11章 手势识别 263
11.1 PanResponder API 263
11.2 监视器 263
11.2.1 指定监视区域 264
11.2.2 定义监视器相关变量 264
11.2.3 准备监视器的事件处理函数 264
11.2.4 建立监视器 265
11.2.5 将监视器与监视区域挂接 265
11.3 监视事件的生命周期 265
11.3.1 单次点击事件的生命周期 266
11.3.2 单次点击事件处理 268
11.3.3 移动手势事件的生命周期 268
11.3.4 监视器异常事件 270
11.4 手势识别处理例程 270
11.4.1 单点手势——点击、拖动选择百分比参数 270
11.4.2 单点手势——带导槽的滑动来电接听或拒接界面 273
11.4.3 单点手势——滑动解锁屏幕界面 275
11.4.4 单点手势——单点任意方向拉动选择界面 277
11.4.5 两点手势 281
第12章 网络 282
12.1 获取网络状态 282
12.1.1 得到当前网络状态 282
12.1.2 监听网络状态改变事件 283
12.1.3 简单判断是否有网络连接 284
12.1.4 判断当前连接是否收费 284
12.2 搭建调试用h t t p、h t t pS服务器 284
12.2.1 搭建h t t p测试服务器 285
12.2.2 搭建h t t pS测试服务器 285
12.3 通过h t t p、h t t pS与网络侧交换数据 286
12.3.1 发送请求 286
12.3.2 接收响应 288
12.3.3 h t t p通信完整例程 290
12.3.4 使用h t t p消息向服务器上传手机中的照片 291
12.4 在React Native开发中使用AJAX技术 291
12.5 WebSocket 292
12.5.1 WebSocket服务器的创建 292
12.5.2 在RN中使用WebSocket通信 293
12.6 推送 294
12.6.1 在Android平台上使用推送技术 294
12.6.2 在iOS平台上使用推送技术 295
12.7 Linking API 296
12.7.1 处理发给本应用的链接 296
12.7.2 打开外部链接 297
第13章 网页浏览器、音视频媒体播放 299
13.1 WebView组件样式设置 299
13.2 WebView组件其他属性 299
13.2.1 非回调函数属性 299
13.2.2 回调函数属性 300
13.2.3 平台独有属性 300
13.2.4 WebView组件成员函数 301
13.3 网页浏览器使用例程 301
13.3.1 浏览网页例程 301
13.3.2 加载本地网页例程 304
13.4 音视频媒体播放 306
第14章 应用权限与图库操作 307
14.1 应用权限 307
14.1.1 iOS平台应用权限 307
14.1.2 Android平台应用权限 307
14.2 React Native开发中iOS平台链接库的使用 310
14.3 获取手机中所有的图片信息 312
14.4 图片信息详解 314
14.4.1 Android平台图片信息 314
14.4.2 iOS平台图片信息 315
14.5 显示从CameraRoll API得到的图片 315
14.6 为用户提供图片选择界面 316
14.7 图片的保存与读取显示 318
14.7.1 保存图片数据 319
14.7.2 读取并显示图片 319
14.8 将图片通过POST消息上传 320
14.8.1 搭建配合测试服务器 320
14.8.2 上传图片例程 320
14.9 裁剪图片 323
14.9.1 裁剪图片 323
14.9.2 使用裁剪后的图片 324
第15章 选择器、位置相关和应用状态 325
15.1 日期、时间选择器 325
15.1.1 DatePickerAndroid API 325
15.1.2 TimePickerAndroid API 327
15.1.3 DatePickerIOS组件 328
15.2 Picker组件 330
15.2.1 Picker组件的样式设置 330
15.2.2 Picker组件的属性 330
15.2.3 Picker.Item组件的属性 331
15.2.4 Picker组件例程 331
15.3 PickerIOS 334
15.4 Slider组件 336
15.5 AppState API 338
15.5.1 AppState API的用途与用法 338
15.5.2 AppState API例程 338
15.6 获取地理位置 339
15.7 Vibration API 340
15.7.1 Android平台振动功能的实现 340
15.7.2 iOS平台振动功能的实现 341
15.8 地图功能 342
第16章 RN开源组件 343
16.1 微软热更新开源平台——CodePush 343
16.1.1 安装与注册CodePush 343
16.1.2 CodePush相关命令 344
16.1.3 在RN项目中集成CodePush 345
16.1.4 CodePush使用注意事项 347
16.2 Google统计平台——Google Analytics 348
16.2.1 Google统计能力 348
16.2.2 注册Google统计账号 351
16.2.3 在RN中使用Google统计 352
16.3 极光推送组件 352
16.4 数据存储 352
16.4.1 Realm移动平台 352
16.4.2 RN中文件操作 353
16.4.3 RN中数据库操作 353
16.5 图像处理 353
16.6 微信开发组件 354
16.7 支付宝支付组件 354
16.8 获取设备信息 354
16.9 国际化处理 355
第17章 混合开发高级篇 356
17.1 使用Objective-C语言创建私有的React Native组件 356
17.1.1 增加FLAnimatedImage链接库 356
17.1.2 创建视图管理类 358
17.1.3 封装开源代码中的视图类 358
17.1.4 在React Native侧调用私有组件 360
17.1.5 例程运行效果 362
17.2 使用Swift语言创建私有的React Native组件 363
17.2.1 整合开源项目 363
17.2.2 建立组件管理者和桥接头文件 366
17.2.3 Objective-C与React Native接口部分 367
17.2.4 使用Swift语言实现组件控制 368
17.2.5 在React Native侧调用私有组件 370
17.2.6 例程运行效果 371
17.3 使用Android SDK创建私有的React Native组件 371
17.3.1 准备原生代码UI组件 372
17.3.2 实现原生UI管理类 373
17.3.3 创建原生UI实例 374
17.3.4 实现对属性的支持 374
17.3.5 建立原生UI包 374
17.3.6 注册原生UI管理类 375
17.3.7 对应的React Native侧实现 376
17.3.8 运行俯视视图例程 377
第18章 项目配置、生成发布版本安装包及其他 378
18.1 调试环境与正式运行环境的不同 378
18.2 iOS平台项目配置 379
18.3 iOS平台应用发布 383
18.4 Android平台项目配置 383
18.5 Android平台应用生成发布版本安装包 385
18.5.1 生成发布密钥 385
18.5.2 修改gradle配置文件 385
18.5.3 生成发布版本安装包 386
18.6 其他组件与API 386
18.6.1 动画相关 386
18.6.2 其他未讨论的组件与API 387
附录A ECMAScript 2015语法参考 388
附录B ES 5语法 395
|
內容試閱:
|
预备知识
学习React Native开发需要基础的JavaScript编程知识。我估计有一部分读者可以在某个手机平台使用该平台原生语言进行移动应用开发,但对JavaScript只是有所耳闻。如果是这种情况,不用担心。读者只需要随便找一本JavaScript入门级的书籍(甚至是网上的教学性网页),阅读关于基础语法的章节,花上一天时间(包括找资料的时间)学习相关知识点,接下来就可以通过本书学习React Native开发了。所需要的知识点有:
(1)JavaScript语法。包括语句、注释、变量、数据类型、数组(注意关联数组,Java、C++的数组中没有这个概念)、对象的基本知识。
(2)操作运算符。这个与Java、C++基本上是一样的,读者快速过一下就行。
(3)条件语句、循环语句、switch语句。这与Java、C++基本上是一样的,读者快速过一下就行了。
(4)函数。JavaScript中函数也是一种变量,知道了这一点,其他与Java、C++基本上是一样的,读者快速过一下就行了。
(5)对象。JavaScript的对象定义、实现比Java、C++宽松很多。读者得稍微适应一下。
这些基本的知识点,大多数与Java或者Objective-C的相关知识点很类似。如果读者有基础,阅读这些知识点最多只需要一天的时间。读者不需要搭建JavaScript的开发环境来练习、巩固这些知识点,因为在React Native的开发环境中编写代码就可以练习这些基本的JavaScript知识点,在React Native学习中就会巩固这些JavaScript基本知识。
React Native在开发中用到了其他JavaScript的高级知识点与ES 6的一些新特性,但读者不需要马上去学习这些内容。在通过本书学习React Native开发的过程中若需要使用JavaScript高级知识点,会指出在附录A的什么位置讲解了这些高级知识点,便于读者快速查看。附录A不是JavaScript知识点的全面讲解,只是让读者对React Native开发中需要使用到的JavaScript知识点有足够理解以进行React Native开发。
相关下载地址
笔者希望读者在阅读本书时,能在理解的基础上将例程代码输入到电脑中。输入的过程是一个消化吸收的过程。输入完成后,运行代码,并且按照提示或者针对自己有疑虑的地方进行修改,以便深入理解各个知识点。
正因为如此,本书前面章节中那些短小精悍的例程并没有附在一张光盘上,或者在网上提供下载地址,而是需要读者自己手动输入电脑。
本书还有一些不需要读者手动输入的代码,笔者在GitHub上提供了一个网址供读者自行下载。
本书结构
本书讨论的React Native开发特性覆盖了2017年3月2日发布的React Native 0.42.0版本的绝大部分特性。没有讨论的部分在书末有提及。
首先需要说明的是,本书讨论的知识以跨平台(Android平台与iOS平台)开发为主,书中各章节的绝大部分知识点都是跨平台实现的。只有极小部分是分平台实现的,这一小部分在讨论前都会说明该部分知识适用于哪个平台。
本书的结构是按一个有基本的编程基础知识,刚学习JavaScript基本语法的读者的最佳学习路径来编写的。通过一个个精简的例程,清晰地阐述一个个基本思想。例程尽可能地精简,并且所有例程都是笔者花了大量时间为初学者构思而成的。
本书体例说明
代码与代码说明
本书例程中有大量的代码说明,通过注释的方式与代码同时展示出来。例如:
var IncomingCall = React.createClass({
watcher: null, //用来记录监视器
startFromLeft:true, //用来判断用户最先按下的是最左侧还是最右侧
moveNeedhandle:false, //用来判断监测到的移动事件是否需要处理
注释以粗体字显示以提醒读者注意。读者在自己的开发环境中输入例程时不需要输入注释。
React Native代码中的JSX部分代码不能使用这种注释方式,本书为了统一注释风格还是使用了这种注释方式。读者明白了这一点后,在自己输入代码试验时,请将代码中的注释自行去掉。
注意和提示
注意和提示,是需要提醒读者特别注意的内容。在本书中使用带背景色的字体显示。
致谢
感谢我的父亲阙光金老师与我的母亲袁雪英老师从小到大给我的无私的爱。很抱歉无论我如何努力,也无法回报二老深恩的万分之一。
感谢我的姐姐阙喜戎与姐夫王纯,没有你们的鼎力支持,就没有今天的我。
感谢王汝馨伯父与曾钰伯母,谢谢你们对我的关怀与照顾。
感谢廖建新教授、饶牧老师在我学习工作期间对我的关怀与指导。感谢在我7年北京邮电大学学习期间为我授业解惑的所有老师,谢谢你们!
感谢React Native开发团队,感谢所有参与React Native开发的贡献者。无数移动开发者因为你们无私的奉献而受益。
感谢电子工业出版社郭立总经理、孙学瑛编辑等为审校此书而付出的辛勤工作,以及为此书能快速出版而付出的巨大努力。你们辛苦了!
感谢在工作和生活中帮助过我的所有人,感谢你们,正是因为有了你们,才有了本书的面世。
关于勘误
虽然花了很多时间和精力去核对书中的文字、代码和图片,但因为时间仓促和水平有限,书中仍难免会有一些错误和纰漏,如果大家发现什么问题,请反馈给我,相关信息可在下载本书代码的GitHub页面反馈。
|
|