ReactNative

react-native版知乎日报APP(四) 页面功能实现

2019-08-16  本文已影响0人  cc369e5fa6f8

本节主要说明 部分页面的逻辑功能实现 .

Home (首页)

首页包含的功能点有 : 弹出菜单 , 轮播图 , 上拉与下拉加载 , 主题切换 , 日期选择器 .

Home是整个应用相对复杂的页面 , 从上到下可以分为三个部分 : 导航栏 , 轮播图 , 日报列表 . 这三个部分中还结合一些小功能 , 导致代码量较多 , 这里分部说明各功能的实现.

组件划分

注 : react-native 默认不支持装饰器语法 需要手动增加支持
首先 安装依赖 执行:
yarn add @babel/plugin-proposal-decorators
然后在项目根目录下 创建名为 .babelrc的文件 并增加以下内容 保存即可

{
 "presets": ["module:metro-react-native-babel-preset"],
 "plugins": [
   ["@babel/plugin-proposal-decorators", { "legacy": true }],
   ["@babel/transform-runtime", {
     "helpers": true,
     "regenerator": false
   }]
 ]
}

通过结合 react-native-storage 为日报列表增加缓存 , 当数据不过期时 , 优先调用缓存数据 . 这里需要注意 , 当数据过期时 react-native-storage 会返回过期的数据 , 然后再查找对应的Sync 异步方法更新数据 , 但更新后并不会再次返回 , 下次调用时才返回新的数据. 这就导致有网络且数据过期时,react-native-storage 返回的是过期的数据 , 而不是最新的. 这里通过判断网络状态 , 当链接网络时 , 不调用缓存只等待最新数据返回 , 当离线状态下 , 调用缓存.

效果演示

包括日期选择, 弹出层组件 , 只是一些组件的基本使用 , 不在赘述.

Details (详情页)

详情页主要涉及 WebView和动画的使用

开发过程 :

最初我通过CSS绝对定位, 控制MarginTop,translateY属性切换来实现动画 , 但发现安卓快速滚动时存在性能问题 , 动画跟不上滚动速度. 安卓可以通过 useNativeDriver: true原生本机驱动的形式优化动画性能 , 但该属性支持的动画属性十分有限 , 仅支持opacity, translate transform 下属性 , 不支持像MarginTop这种布局属性 , transform 也不像 Web端 CSS 支持修改动画基点 . 后来发现 react-native-parallax-scroll-view 可以解决部分 , 它能解决页面布局的问题 , 不需要CSS绝对定位就可以实现类似布局, 仅需要实现导航条渐隐背景图上移动画即可 , 最终成功实现预期效果 .

为了提高用户体验 , 还为详情页增加了 , 左滑右滑上下翻页的功能 . 背后的原理 其实就是一个轮播图 , 每页日报铺满视口 , 通过传入的ID数组 , 左右滑动时切换不同的数据 .

性能问题 :

在测试时发现 react-native-parallax-scroll-view带来的副作用 , react-native-parallax- scroll-view 和 react-native-webview 两者结合时 , 在 初次 打开页面会占用大量性能 , 导致在低性能的老机型上导航过渡动画完全丢失 ,在开发调试模式下比较明显 ,目前还没有太好的解决方案。

扩展资料

  1. React Native动画入门
  2. React Native WebView指南
  3. 自定义标题动画
  4. React Native中的动画标题
  5. 使用Native驱动程序进行动画处理
  6. react-native 性能优化

ImgView (图片查看页)

涉及图像的查看与下载保存功能

当点击详情页的图片 , 会进入图片查看页面 , 该功能支持手势缩放与图像保存到本地 . 其中 react-native-image-viewer 负责图像查阅功能 , rn-fetch-blob 负责处理图像文件下载到本地指定文件夹的功能 .

Comment (评论页)

涉及<Modal>遮罩层 <FlatList> 二维列表

主要涉及Modal遮罩层 和 二维数组列表 , 业务代码居多 .

扩展资料

  1. 缓动动画的基础知识

Drawer (侧边栏抽屉)

涉及登录状态读取 , 头像选取拍摄

剩余其他页面 , 包含 设置 , 栏目 , 了解我们 , 意见反馈 , 登录注册等页面 . 代码较少 , 功能也很简单 , 属于一看就懂那种 , 不在赘述 , 有问题请在Github中向我反馈 .

上一篇 下一篇

猜你喜欢

热点阅读