目前主流的移动跨平台技术方案大体可以分为三类,一类是使用原生内置浏览器加载HTML5的Hybrid技术方案,采用此种方案的主要有Cordova、Ionic和微信小程序;另一类是使用JavaScript语言进行开发,然后使用原生组件进行渲染,采用此方案的主要有React Native、Weex和快应用;最后一类是使用自带的渲染引擎和自带的原生组件来实现跨平台,采用此种方案的主要是Flutter。
对于其他的浏览器方案,基本可以抛弃了,现在我们讨论移动跨平台开发主要说的是React Native和Flutter,React Native和Flutter在应用开发上,效率差不多,不过要强调性能的话,还是Flutter为最佳选择。由于现在大家都开始使用Flutter来开发应用,导致React Native的学习资料越来越少。
作为跨平台的忠实粉丝,我在去年的下半年对《React Native移动开发实战》进行了升级,出版了《React Native移动开发实战》的第二版,书中对之前的知识做了重新的梳理,使之更加贴近项目实战,有需要的可以去京东,天猫支持下。
作为目前比较流行的移动跨平台开发方案之一,React Native仍然还有很多的粉丝,特别是熟悉前端React开发的技术人员,国内大厂都在使用哪些移动跨平台框架罗列了目前在使用跨平台技术进行应用开发的一些厂商。
React Native 学习资源精选
目录
资源网站
ES6&ES7
- ES6的新特性,以及ES6与ES5的区别
- 深入浅出ES6(十三):类 Class
- ES6新特性:使用export和import实现模块化
- ES6令人激动的特性
- ES6 学习笔记
- React on ES6+
- React/React Native 的ES5 ES6写法对照表
- 深入浅出ES6
- 阮一峰ES6 文档
- JS 函数式编程指南
React.js
React.js相关教程
React Native
- React Native 官方文档
- React Native 中文版 - 极客学院
- React Native 中文版 - reactnative.cn
- React Native中文社区
- React Native组件库网站
- React Native组件库网站
- Use React Native 资讯站
教程
布局相关
开发调试
发布部署
- React-native Android环境搭建
- React Native应用部署/热更新-CodePush最新集成总结
- React Native发布APP之签名打包APK
- ReactNative增量升级方案
- React Native: Android 的打包
- ReactNative之原生模块开发并发布——iOS篇
- ReactNative之原生模块开发并发布——android篇
- React Native for Android 入门老虎
系列教程
- React Native 学习笔记
- React Native高手进阶-专栏
- React Native高手进阶-专题
- React Native 每日一学(Learn a little every day)
- React-Native-lesson
- React Native 学习笔记
- React Native 之 JSBridge
- ReactNative iOS源码解析(一)
- ReactNative iOS源码解析(二)
- 学习ReactNative,全平台所需要的知识点
- React Native与Iconfont
- React Native Animation Book
项目实践&教程
- React Native项目实战视频教程
- 教你轻松在React Native中集成统计的功能)
- 手把手教你构建运行React Native官方Examples
- ReactNative For Android 项目实战总结
- Moles:携程基于React Native的跨平台开发框架
- 构建 Facebook F8 2016 App / React Native 开发指南
- React Native 从入门到原理
- 在react-native中使用redux
- 深入浅出 - Redux
- 优化 Redux 架构的 10 个技巧【译】
开源APP
它山之石可以攻玉。
- GitHubPopular:基于React Native的查看、阅读、收藏GitHub上 最受欢迎的开源项目的APP,不仅如此,它还是一款GitHub Trending的客户端。
- React Native官方Demo:React Native官方Demo,汇集了各种组件,API的使用Examples。
- Facebook F8 App :基于React Native 的2016 F8大会APP。
- HackerNews-React-Native:Hacker 新闻客户端。
- react-native-nw-react-calculator:基于React Native的计算器,iOS/Android、Web、桌面多端。
- react-native-dribbble-app:基于React Native的Dribbble客户端。
- noder-react-native:Noder-cnodejs客户端。
- ZhiHuDaily-React-Native:知乎日报Android版。
- react-native-gitfeed:一款基于React Native的GitHub客户端。
- FinanceReactNative:Finance - 股票报价app。
- React-Native-Gank:Gank.io客户端。
- leanote-ios-rnLeanote:Leanote for iOS(云笔记)。
- shopping-react-native :购物app-界面。
- react-native-nba-app:This is why we play。
- react-native-gitosc:使用React Native重写的OSChina的Git@OSC客户端。
- reading:iReading App。
- toutiao:一款基于react-native 的ios android版 资讯头条 APP。
- react-native-lagou:用react native写的仿拉勾ios版本demo。
- RN-ListViewLoadMore:ReactNative基础项目,包含Navigator、TabBar、以及ListView的Refresh和LoadMore
- react-native-BabyHealth-:仿 “宝宝健康” app,实现Listview展示、收藏、跳到appstore、react-redux与redux-thunk的使用
- react-native接入ios/android原生模块 : react-native接入ios/android原生模块例子
- react-native图片上传实例
- [movieapp] (https://github.com/junedoming... : Discover Movies and TV shows - React Native
框架
React-Native开发的库/ SDK类型。
- NativeBase:一款融合了ES6用于在React Native上创建创建高质量的Android&iOS APP的框架。
- tcomb-form-native:强大的表单处理控件,支持 JSON 模式,可插拔的外观和感觉。
- BlankApp UI:React Native的高度可定制和主题组件。
- Shoutem UI:一个完整React Native的UI工具包。
- React Native Elements:React Native UI元素和组件的集合。
- Panza:收集无状态,功能性,跨平台的ui组件,用于React Native。
库
- react-native-launch-image:用在React Native上手动关闭iOS启动界面(Launch Screen)的工具。详细说明
- RNShareSDK:一款基于原生平台ShareSDK的ReactNative插件,方便RN开发者集成各大社交平台的分享和授权功能。
- react-native-social-kit:对第三方社交账号SDK的封装,使开发者能在React Native App里使用授权、分享等功能。
- react-native-agora: 基于声网音视频SDK封装的React Native模块,方便RN开发者可以轻松集成WebRTC功能,实现电话会议,视频会议,直播等功能。
组件
UI
- React-Native-Elements 一组开发RN的UI工具包(强烈推荐)
- APSL/react-native-button 支持多种点击事件的Button控件
- mastermoo/react-native-action-button 可自定义的多动作按钮组件
- react-native-activity-view iOS上的分享和action sheets组件
- react-native-app-intro 引导页
- react-native-blur 添加模糊或者毛玻璃效果
- react-native-calendar 日历
- react-native-collapsible 可折叠的component
- React Native Drawer 抽屉效果,可 用来实现侧拉菜单
- react-native-dropdown下拉菜单
- ReactNativeEffectsView 封装了iOS 8上的UIVisualEffectViews,在React Native中实现毛玻璃效果
- react-native-gesture-password 手势解锁,支持iOS和Android
- react-native-gifted-form 在React Native中方便的使用表格
- react-native-gifted-messenger 方便的实现聊天UI
- react-native-grid-view 网格视图,类似iOS中的UICollectionView
- react-native-keyboard-spacer 适用于iOS的根据键盘自动调整输入框
- react-native-keyboardevents 监听键盘显示/隐藏
- react-native-keyboard-aware-scroll-view 一个处理键盘外观的组件,自动滚动到焦点的TextInput
- react-native-mapbox-gl 地图
- airbnb/react-native-maps 针对iOS + Android的React Native Mapview组件
- lelandrichardson/react-native-maps 地图
- react-native-material-kit 一组UI Components,为了介绍 Material Design
- react-native-modalbox 用于模态显示的Component
- react-native-orientation 监听设备旋转
- react-native-parallax parallax效果
- react-native-picker 选择器,可用于实现时间选择,区域选择
- react-native-progress-hud ProgressHUD
- react-native-controllers 封装了 原生的iOS 导航栏,tabbar,抽屉效果等。
- react-native-search-bar 封装iOS原生UISearchBar
- react-native-spinkit 一组Activity指示器
- react-native-splashscreen App载入视图,启动后自动隐藏
- react-native-vector-icons 3000+支持自定义的图标
- react-native-invertible-scroll-view 逆向的ScrollView,从底部开始布局,适用于聊天等向上滑动来加载更多的情况
- react-native-loading-spinner-overlay 加载中的提示spinner ,支持iOS/Android
- react-native-tabs 选项卡可用于底部标签栏以及分段视图
Navigation
- react-native-router-flux 一款很火的导航组件。
- react-native-router 路由导航组件。
- react-native-navbar 一款用于React Native上的可定制的导航条。
- react-native-tab-navigator 一款兼容Android、iOS的TabBar组件。
- react-native-drawer-layout 抽屉组件。
- react-native-drawer 另一款抽屉组件。
- ex-navigator 封装Navigator,以Route为中心的Navigator
ViewPager
- react-native-swiper 一款轮番滑动的组件。
- react-native-looped-carousel 滚动轮播组件。
ListView&ScrollView
- react-native-refreshable-listview 下拉刷新组件。
- react-native-refresherw 下拉刷新组件。
- react-native-drop-refresh 下拉刷新组件。
- react-native-refresher 支持下拉刷新的listview
- react-native-gifted-listview 下拉刷新和上拉加载的ListView
- react-native-smart-pull-to-refresh-listview 下拉刷新组件。
- react-native-pull 下拉刷新组件。
- react-native-swipe-list-view 滑动删除组件。
- react-native-swipeout iOS样式的划动删除组件。
- react-native-sortable-listview 拖拽排序组件。
- react-native-draggablelist 拖排序组件。
- react-native-SortableList 拖拽排序组件。
- react-native-tableview 桥接了原生的UITableView
- react-native-sglistview 为了解决React Native中ListView的内存问题
- react-native-input-scroll-view 完美的TextInput ScrollView
Text&Rich Content
- react-native-htmlview:HTML显示组件,渲染HTML text 。
弹框
- react-native-easy-toast:一款用于React Native上消息提示弹框组件,使用方便,支持定义Toast,支持iOS,Android。
- react-native-modal:模态框,作者已经将该组件添加到React Native,所以开发者可以直接使用Modal;
- react-native-popover:一款类似Android popupwindow的弹出框组件。
音视频相机
- react-native-barcodescanner 二维码扫描组件
- react-native-camera 相机组件
- react-native-image-picker 可以从相机或者相册选择图片
- react-native-video 视频组建
- react-native-image-crop-picker 图片选择器,支持对图片进行切割
图形动画
- react-native-button 按钮,因为react-native没有提供button
- react-native-scrollable-tab-view 滑动的tab视图
- react-native-animatable 封装了很多动画,强烈推荐
- react-native-lightbox 图片全屏预览
- react-native-looped-carousel 视图轮播
- react-native-svgkit 显示SVG格式图片
- react-native-chart 绘图(折线图,柱状图,扇形图)
- react-native-circular-progress 圆形的显示进度的视图
- gl-react-native React Native中使用OPENGL来实现复杂的图片和components渲染
- react-native-viewpager 视图轮播,支持循环滚动,自定义视图。已做性能优化
- react-native-gallery React Native图片组件库,支持常见手势。
- lottie-react-native 基于Lactie封装的渲染After Effects动画
数据存储
- react-native-sqlite-storage iOS/Android上的Sqlite3封装
- react-native-store 封装了react-native AsyncStorage
- realm-js 用JS来调用Realm
Web相关
- react-native-safari-view 封装iOS中的 Safari View Controller
- react-native-webview-android 封装了Android中的Webview
- react-native-webrtc A WebRTC module for React Native.
系统相关
- react-native-device-info 获取设备信息
- react-native-barcodescanner 扫码
- react-native-contacts 访问通讯录
- react-native-fs 访问本地文件系统
- react-native-push-notification 本地和远程通知
- react-native-touch-id 调用TouchID认证
Material Design
- mrn:Material Design组件库。
- react-native-material-design:一款用于React Native上的材料设计UI组件库。
工具包
- react-native-style-tachyons 为React Native提供更好的样式
- react-native-css 使用css样式React-Native组件
- react-native-mock 一个为ReactNative提供的测试框架
- react-native-google-analytics google统计分析
- react-native-fabric 统计分析,崩溃分析等
- react-native-wechat 调用微信相关,比如分享,登录,支付
- reactotron 在终端检测React Dom和Reactive App
- react-native-windows Windows平台的RN工具
- react-native-webpack-server 用Webpack来编译React Native App
TabLayout
- react-native-scrollable-tab-view 一款用于React Native上TabLayout组件。
- react-native-tab-navigator TabBar切换视图
- Teaset:一款React Native UI框架,提供20+纯JS组件,可与React Native已有组件无缝组合使用,专注于内容展示与操作控制。
工具
IDE
- Nuclide:Nuclide 是 Facebook 推出的一套基于 Atom 的开发工具集。用于开发基于 Hack 的 Web 应用。提供自动完成和 JavaScript 类型检查,内建 React 开发支持,并支持 Facebook 最新的 React Native 库,支持 Facebook 的 Flow JavaScript 类型检查器。
- WebStorm:JetBrains公司出品的用于前端开发的IDE,WebStorm有着JetBrains公司IDE的优良血统,是前端工程师的一个开发神器。另外,AndroidStudio也是基于JetBrains的IDE,这对于习惯了AndroidStudio的开发者来说,WebStorm无疑是一个最佳的选择。
其他
- CodePush:CodePush 是微软提供的一套用于热更新 React Native 和 Cordova 应用的服务。
- Redux:用于JavaScript apps上的一款可预见的状态管理框架。
- MobX:与 Redux 相比,更轻便、自由的状态管理框架。
- redux-react-native-i18n 具有复数形式的i18n解决方案支持Redux上的React Native应用程序
- React Sight 用于React的可视化工具,支持Fiber,Router(v4)和Redux Chrome Plug github
- React Developer Tools 一个扩展程序,允许检查Chrome和Firefox开发人员工具中的React组件层次结构。 Chrome Plug github
- react-native-rename : Rename react-native app with just one command
视频
新闻&讨论
一次学习,随处可写
- react-native-macos:使用React Native和Cocoa组建macOS桌面应用。
- react-native-web:使用React Native组建Web应用。
一起踩坑
- 解决:next release empty section headers will be rendesred. In this release you can user ‘enableEmptySections’ flag to render empty section headers.
- error: no devices/emulators found
- react-native run-android时出现Could not download imagepipeline.aar
- Undefined symbols for architecture x86_64: “std::terminate()”
- 方法一:animated
useNativeDriver
is not supported because the native animated module is missing - 方法二:animated
useNativeDriver
is not supported because the native animated module is missing - 最终都需要将
libRCTAnimation.a
文件导入 react-native issues #11094 - error: unable to find utility "instruments", not a developer tool or in PATH
- Property 'force' not found on object of type 'UITouch'
应用反应缓慢,出现卡顿:
- 查看是否console日志打印过度造成
- React Native Debugger放到最前面,浏览器窗口不要放到选项卡里面
- 小米 - com.android.builder.testing.api.DeviceException: com.android.ddmlib.InstallException: Failed to establish session
- *.h file-not-found
- 修改安卓app在手机上展示的名称
Your_app_name_to_display
android{
applicationVariants.all { variant ->
variant.outputs.each { output ->
def outputFile = output.outputFile
if (outputFile != null && outputFile.name.endsWith('.apk')) {
File outputDirectory = new File(outputFile.parent);
def fileName
// 你的apk打包名称
if (variant.buildType.name == "release") {
fileName = "app_v${defaultConfig.versionName}_${releaseTime()}_${variant.productFlavors[0].name}.apk"
} else {
fileName = "app_v${defaultConfig.versionName}_${packageTime()}_debug.apk"
}
output.outputFile = new File(outputDirectory, fileName)
}
}
}
}