1.TabBarItem 逻辑完善

那么为了更好的用户体验,我们这边还需要来处理一下点击 TabBarItem 的一下细节,那就是当用户点击 Item 时,可能只是单纯的想进行页面的 切换或者置顶操作 ,而不想进行 刷新,那么我们就需要来判断一下什么时候需要刷新,什么时候需要置顶。

那么我们可以通过判断 ListView 中的 Scroll 的偏移量来判断是否需要进行置顶操作,当偏移量大于 1 的时候我们就进行置顶操作,否则的话我们就进行刷新操作。

那么问题又来了,当我们执行刷新操作的时候,应该模拟用户下拉显示 滚动小菊花 来告诉用户我们在进行刷新操作,可是 pullList 并没有提供我们这个方法怎么办?那我们就需要分析 第三方框架的内容 来找方法解决这个问题

GDHome.js

// 点击了Item
clickTabBarItem() {
// // 打印组件
// console.log(this.refs.pullList);
// // 打印偏移量
// console.log(this.refs.pullList.scroll.scrollProperties.offset); let PullList = this.refs.pullList; if (PullList.scroll.scrollProperties.offset > 0) { // 不在顶部
// 一键置顶
PullList.scrollTo({y:0});
}else { // 在顶部 // 执行下拉刷新动画
PullList.state.pullPan = new Animated.ValueXY({x: 0, y: this.topIndicatorHeight * -1}); // 加载最新数据
this.loadData(); // 关闭动画
setTimeout(() => {
PullList.resetDefaultXYHandler();
},1000);
}
}

2.关闭筛选菜单滑动手势

那这边我们的筛选菜单还有个问题,就是可以响应我们的手势进行滚动,这样肯定是不对的,那么我们需要关闭这个手势的监听,使这个菜单不能滚动,具体操作如下:

GDCommunalSiftMenu.js

render() {
return(
<TouchableOpacity
onPress={() => this.popToHome(false)}
activeOpacity={1} // 不透明
>
<View style={styles.container}>
{/* 菜单内容 */}
<ListView
scrollEnabled={false} // 设置禁止滚动
dataSource={this.state.dataSource} // 设置数据源
renderRow={this.renderRow.bind(this)} // 根据数据初始化 Cell
contentContainerStyle={styles.contentViewStyle} // 内容样式
initialListSize={16} // 一次性渲染几行数据
/>
</View>
</TouchableOpacity>
)
}

3.Navigator 掉帧卡顿问题处理

到现在肯定有很多朋友发现 Navigator 跳转动画并不是那么流畅,会出现掉帧卡顿的现象,并不像 NavigatorIOS 那么丝丝顺滑;造成这个的原因是因为 NavigatorIOS 是在 UI线程 执行的 动画操作,而 Navigator 是在 js线程执行的动画,那这样就会 阻塞住 JS线程,那么怎么去解决这个问题?这边提供 2 种方案:

第一种:使用 navigation 框架,这个是目前替代 navigator 最好的方案之一,很强大,很流畅,但是需要再去学习一下使用。

第二种:如果你懒得学习上面的框架,那么这边再给各位提供另一种方法 —— 使用官方提供的 API:InteractionManager(可以将一些耗时较长的工作安排到所有互动或动画完成之后再进行。这样可以保证JavaScript动画的流畅运行),这边我们就使用这种方案来进行一下优化:

// 跳转到搜索页面
pushToSearch() {
InteractionManager.runAfterInteractions(() => {
this.props.navigator.push({
component: Search,
});
});
}

.

React-Native 之 GD (十九)TabBarItem 逻辑完善 / 关闭筛选菜单滑动手势 / Navigator 掉帧卡顿问题处理的更多相关文章

  1. React Native学习(十)—— 生命周期

    本文基于React Native 0.52 Demo上传到Git了,有需要可以看看,写了新内容会上传的.Git地址 https://github.com/gingerJY/React-Native-D ...

  2. (七十九)c#Winform自定义控件-导航菜单

    前提 入行已经7,8年了,一直想做一套漂亮点的自定义控件,于是就有了本系列文章. GitHub:https://github.com/kwwwvagaa/NetWinformControl 码云:ht ...

  3. React文档(十九)不使用ES6

    通常你会将一个React组件定义成一个普通的js类: class Greeting extends React.Component { render() { return <h1>Hell ...

  4. 第一百八十九节,jQueryUI,折叠菜单 UI

    jQueryUI,折叠菜单 UI 学习要点: 1.使用 accordion 2.修改 accordion 样式 3.accordion()方法的属性 4.accordion()方法的事件 5.acco ...

  5. React Native Android配置部署踩坑日记

    万事开头难 作为一只进入ECMAScript世界不久的菜鸟,已经被React Native的名气惊到了,开源一周数万星勾起了我浓烈的兴趣.新年新气象,来个HellWorld压压惊吧^_^(故意少打个' ...

  6. React Native 0.50版本新功能简介

    React Native在2017年经历了众多版本的迭代,从接触的0.29版本开始,到前不久发布的0.52版本,React Native作为目前最受欢迎的移动跨平台方案.虽然,目前存在着很多的功能和性 ...

  7. 新建React Native项目步骤

    根据官方环境 https://reactnative.cn/docs/getting-started/ 搭建好之后 1.新建项目 打开React Native 命令行工具,并输入 react-nati ...

  8. React Native 系列(九) -- Tab标签组件

    前言 本系列是基于React Native版本号0.44.3写的.很多的App都使用了Tab标签组件,例如QQ,微信等等,就是切换不同的选项,显示不同的内容.那么这篇文章将介绍RN中的Tab标签组件. ...

  9. React Native 系列(九)

    前言 本系列是基于React Native版本号0.44.3写的.很多的App都使用了Tab标签组件,例如QQ,微信等等,就是切换不同的选项,显示不同的内容.那么这篇文章将介绍RN中的Tab标签组件. ...

随机推荐

  1. Strust2+POI导出exel表格且解决文件名中文乱码/不显示

    下载并导入项目[poi.3.17.jar] strust.xml <action name="returnLate_*" class="com.stureturnl ...

  2. FHJ学长的心愿 QDUOJ 数论

    FHJ学长的心愿 原题链接,点我进去 题意 给你一个数N,让你求在\[C^{0}_{n} \ C^{1}_{n}\ C^{2}_{n}\ \dots \ C^{n}_{n}\]中有几个组合数是奇数. ...

  3. [BZOJ 3123] [SDOI 2013]森林(可持久化线段树+并查集+启发式合并)

    [BZOJ 3123] [SDOI 2013]森林(可持久化线段树+启发式合并) 题面 给出一个n个节点m条边的森林,每个节点都有一个权值.有两种操作: Q x y k查询点x到点y路径上所有的权值中 ...

  4. python UnicodeEncodeError: 'gbk' codec can't encode character ...

    使用Python写文件的时候,或者将网络数据流写入到本地文件的时候,大部分情况下会遇到:UnicodeEncodeError: 'gbk' codec can't encode character ' ...

  5. Tarjan水题系列(4):HAOI2010 软件安装

    题目: 现在我们的手头有N个软件,对于一个软件i,它要占用Wi​的磁盘空间,它的价值为Vi​.我们希望从中选择一些软件安装到一台磁盘容量为M计算机上,使得这些软件的价值尽可能大(即Vi​的和最大). ...

  6. 02:django model数据库操作

    Django其他篇 目录: 1.1 Django中使用MySQL 1.2 创建表 1.3 Django一对多表结构操作 1.4 Django多对多表结构操作 1.5 一大波Model操作 1.6 Mo ...

  7. Python 实用脚本

    Python 实用脚本 脚本写的好,下班下得早!程序员的日常工作除了编写程序代码,还不可避免地需要处理相关的测试和验证工作. 例如,访问某个网站一直不通,需要确定此地址是否可访问,服务器返回什么,进而 ...

  8. linux:shell脚本格式

    shell脚本格式:     #!/bin/bash //第一行指定bash     命令群.....          例子:     #!/bin/bash     DESCDIR='/tmp/t ...

  9. 【 React - 1/100 】React绑定事件this指向问题--改变state中的值

    /** * 报错: * Cannot read property 'setState' of undefined * 原因: this指向不一致.btnAddCount中的this 和render中的 ...

  10. linux 启动和关闭 MySQL

    建议使用 mysqld_safe 命令启动,因为该命令添加了安全特性,当服务器发生错误时自动重启并且 把运行信息记录错误发送到日志文件!命令格式如下: mysqld_safe options 命令的常 ...