怀抱观古今,寝食展戏谑。这篇文章主要讲述React Native Android 应用层实战沦陷记相关的知识,希望能为你提供帮助。
【工匠若水 http://blog.csdn.net/yanbober 未经允许严禁转载,
请尊重作者劳动成果。私信联系我】
1 背景 一眨眼又一年快要过去了,
原计划今年的最后一个小目标(
React Native)
看样子要留尾巴到明年了,
React Native 想说爱你不容易。怎么评价你呢?
应用层 JSX 编写还是很友好的,
尼玛框架接入的各种锅却让人痛哭不已,
万事开头难,
对于 React Native 的接入可以说大量工作可能都需要投入到框架接入中(
各种灰度实验的兼容性、各种锅)
,
一旦接入稳定以后真的就是尝到甜头了,
然而到现在为止框架的稳定接入依旧需要投入大量时间。既然如此,
为了连贯那就先来一发假装接入后的甜头 —- React Native 开发(
android 开发的角度来实现 React Native JS 应用)
。
下面分享一个基于 React Native 的 Android 版个人业余实战项目,
以便记录个人学习及运用 React Native 的一些总结;
该篇为本项目 1.X 版本的实战总结,
2.X 等版本的总结在做完及验证合入 master 以后再做入坑总结吧,
所以这篇会比较简单。
文章图片
本项目开源地址: https://github.com/yanbober/RNPolymerPo
【工匠若水 http://blog.csdn.net/yanbober 未经允许严禁转载, 请尊重作者劳动成果。私信联系我】
2 项目分享 RNPolymerPo( 点我查看本项目开源代码) , 一个基于 React Native 的 Android 生活聚合类应用; 编写的初衷就是为了整理汇总使用 React Native 的一些技巧, 使用的工具是 Android Studio & Visual Studio Code & Chrome, 下面我们分别介绍该项目的成型情况。
2-1 项目框架 整个项目采用 React Native JS 进行编写, 数据统计和应用分发采用蒲公英测试平台, 后台采用聚合数据等相关免费 API 接口。核心界面包括 Splash 广告倒计时闪屏页、主界面( 含悬浮球) 、微信精选页面、新闻分类查看页面、个人中心页面、在线机器人客服聊天页面、通用 WebView 跳转页面, 整个实现完全模拟了一个常规企业级应用的常见页面来处理, 以此就可以比较系统的学习 React Native 的 JS 编写技巧及踩坑记录, 整个项目使用了 React Native 及配套的 React Native Redux 框架, 具体 package.json 中依赖如下:
{
......
"
dependencies"
: {
"
react"
: "
15.4.1"
,
"
react-native"
: "
0.38.1"
,
"
react-redux"
: "
^4.4.6"
,
"
redux"
: "
^3.6.0"
,
"
redux-thunk"
: "
^2.1.0"
,
"
react-native-swiper"
: "
^1.5.4"
,
"
react-native-scrollable-tab-view"
: "
^0.6.0"
,
"
react-native-tab-navigator"
: "
^0.3.3"
}
}
2-2 Splash开屏广告倒计时页面 大致效果如下图( 实际为启动时模拟随机获取服务端一张广告图片, 正式可替换为 WebView 等, 然后图片以动画淡出显示, 显示 图片时左上角再显示 AD 字样, 右下角显示 5 S 倒计时全屏幕开屏) :
文章图片
涉及知识点及处理技巧:
- 注意开屏的概念,
展示后进入应用主页后点击 Back 不能再显示,
所以在使用 Navigator 组件由 Splash 页面跳转 Home 页时要使用 Navigator 的 replace 等方法来替换当前栈,
避免 Back 又回来 Splash 页面。
- React Native 动画在 Android 某些设备上性能还是有些堪忧,
所以能省略就尽量别使用吧。
文章图片
涉及知识点及处理技巧:
- React Native ListView 类比 Android 的灵活使用(
RN ListView 存在性能问题,
最好寻求替代方案)
。
- 悬浮球布局技巧采用 React Native 的 style 的绝对 position 实现。
- react-native-swiper 开源组件的学习(
不能只会用,
要学人家怎么自定义 RN 纯 JS 层组件的,
实质也是 ScrollView 的相关属性组合控制实现,
类似 Android 的自定义,
因为实质就是 Android 端各种 Touch 事件传递过来换了叫法而已,
猫就是咪,
咪就是猫的道理)
。
- 底栏采用 react-native-tab-navigator,
实质依旧是想学习下人家的写法,
毕竟是写 Android 的,
虽然知道是事件控制,
但是还得学些人家优质的 JS 写法,
实质要学习的就是灵活掌握如何封装组件及切换 Tab 时 RN state 的处理。
文章图片
涉及知识点及处理技巧:
- React Native ListView 灵活运用,
分页加载的组件实现技巧及配合 Redux 的分页加载处理技巧。
- ListView 封装成 GridView 的技巧(
注意 item 的key 值设定,
避免不必要的性能问题)
。
文章图片
涉及知识点及处理技巧:
- 常规 React Native 文档接口使用技能,
没啥技巧。
- Item 推荐的内容都值得拜读。
文章图片
涉及知识点及处理技巧:
- react-native-scrollable-tab-view 组件使用,
现在还在研究这个组件自定义实现的细节,
后面有空再细说一篇成果吧,
这个老外还是很厉害的,
膜拜。
- ListView 的常规渲染,
数据拉取不同状态时页面渲染不同的组件,
譬如 Loading、Item 等,
比较符合真实生产环境(
注意 item 的key 值设定,
避免不必要的性能问题)
。
文章图片
涉及知识点及处理技巧:
- 聊天界面数据采用 JS 数组保存,
每次对话双方数据均通过 Redux 发送触发 state 然后在聊天界面的 render 中插入界面预定义的数组中再刷新界面(
state 的优化,
不要存储太多大量数据,
而尽可能做标记)
。
- 两个聊天 item 布局使用同一个封装的组件,
只是依据是谁的 type 决定使用怎么样的 style而已,
以此做到动态布局。
- 键盘输入后聊天自动向上滑动采用了 React Native ListView 自生性能的一个坑实现,
那就是每逢 item 刷新时 ListView 的 Header、Footer 都会重新刷新,
所以我们可以通过 Footer 的 onLayout 方法获得为止进行 ListView 的 scrollTo 滑动,
以此实现 IM 聊天自动滑屏。
- 暂时有一个锅还没找到原因,
键盘弹出时一些固件上概率性 ToolBar 被顶上去了,
坑爹。
文章图片
涉及知识点及处理技巧:
- React Native WebView 在某些固件上概率性 Web 多级页面 goBack 崩溃。
- 注意 WebView 页面多级页面物理 Back 键的支持和 JS 注入的技巧(
类似 Android 中 JS 注入一样)
。
【工匠若水 http://blog.csdn.net/yanbober 未经允许严禁转载, 请尊重作者劳动成果。私信联系我】
3 项目总结 到此对于一个 Android 开发来说, 我只能说我自己被沦陷了, 还是期待自己尽快啥时候能搞定框架接入的兼容锅吧, 这样平台有了以后 React Native 应用层的 JSX 实现起来业务也就真的一劳永逸了, 万事开头难啊, 难于上青天啊。不过说句题外话, 通过 React Native 的学习也促使我对 JS 学习的欲望, 即便将来 React Native 真的不被看好之时自己也没有损失, 因为不仅学会了前端的一些东西还对多平台特性有了认识, 更重要的是 React Native 框架源码的拜读也能对自己架构把握、思路拓展、代码风格等各方面得以提升。这么想的话, 未尝不是一件好事呢? 还管那么多 React Native 值不值得学习、值不值得被看好的流言干嘛呢? 还是那句老话, 行胜于言。
总而言之, React Native 第一版的框架接入一定是痛苦的, 但是框架一旦稳定了就是造福大众, 这是显而易见的。
本项目开源地址: https://github.com/yanbober/RNPolymerPo
PS: 好几个晚上没有规律作息了, 这么晚睡就为了整理这玩意, 免得以后忘了, 好记性不如烂博客, 罪过啊!
文章图片
【React Native Android 应用层实战沦陷记】【工匠若水 http://blog.csdn.net/yanbober 未经允许严禁转载, 请尊重作者劳动成果。私信联系我】
推荐阅读
- Android评论图片可移动顺序选择器
- Android RecycleView + CardView 控件简析
- android之网络编程
- Android中AlarmManager使用示例(持续更新)
- Android 7.0 UICC 分析
- Android:OpenFire 相关API (持续更新)
- Android-Sqlite数据库的操作
- Android和iOS的11大最佳家庭定位器应用软件推荐合集
- 如何修复Windows 10显示亮度太低(即使设置为100%)(解决办法)