React native ListView 增加顶部下拉刷新和底下点击刷新示例


Posted in Javascript onApril 27, 2018

1. 底部点击刷新

1.1 先增加一个按钮 

React native ListView 增加顶部下拉刷新和底下点击刷新示例

render() {
  if(!this.state.data){
   return(
     <Text>Loading... </Text>
   )
  }else{
   return(
     <ListView
      refreshControl={
       <RefreshControl 
         refreshing = {false}
         onRefresh = {this.reloadWordData.bind(this)}
       />
      }
      dataSource={this.state.data}
      renderRow={(rowData)=>this.renderRow(rowData)}
      renderFooter={this.renderFooter.bind(this)}
     >
      </ListView>
 
   );
  }
 }
 
renderFooter(){
   return (
   <View style={{marginVertical: 10, marginBottom:20}} >
      <Button
       onPress={this.addMoreOnFoot.bind(this)}
       title="点击载入更多"
      />
    </View>
   )
 }

给ListView 增加一个renderFooter 方法来绘制底部元素。在里面显示一个按钮。

按钮处理逻辑:

addMoreOnFoot(){
 // alert('addMoreOnFoot')
 // console.log('addMoreOnFoot')
 const url = 'http://127.0.0.1/getFootContent?lastid=' + this.state.footLastId + '&count=20&isTop=0'
 fetch(url)
 .then((response)=>response.json())
 .then((jsondata)=>{
   if (jsondata.data && jsondata.data.length > 0){
   const rowData = this.state.jsondata.concat(jsondata.data);
   this.setState({
    footLastId:jsondata.data[jsondata.data.length - 1]['id'],
    jsondata:rowData,
    data:new ListView.DataSource({rowHasChanged:(r1, r2) => r1 != r2}).cloneWithRows(rowData),
   })
   }
 })
 .catch((error)=>{
  alert(error);
 });
}

点击后进行网络处理,把之前最后一条id也传给服务器,让服务器返回这个id后面的20条记录。然后重新setState即可。

2. 头部下拉刷新

ListView中增加RefeshControl

render() {
  if(!this.state.data){
   return(
     <Text>Loading... </Text>
   )
  }else{
   return(
 
     <ListView
      refreshControl={
       <RefreshControl 
         refreshing = {false}
         onRefresh = {this.reloadWordData.bind(this)}
       />
      }
      dataSource={this.state.data}
      renderRow={(rowData)=>this.renderRow(rowData)}
      renderFooter={this.renderFooter.bind(this)}
     >
      </ListView>
 
   );
  }
 }

载入最新的头部数据添加到this.State中

reloadWordData(){
  // alert(this.state.topLastId)
  const url = 'http://127.0.0.1/getFootContent?lastid=' + this.state.topLastId + '&count=20&isTop=1'
  fetch(url)
  .then((response)=>response.json())
  .then((jsondata)=>{
    if (jsondata.data && jsondata.data.length > 0){
    const rowData = jsondata.data.concat(this.state.jsondata);
    this.setState({
     topLastId:jsondata.data[0]['id'],
     jsondata:rowData,
     data:new ListView.DataSource({rowHasChanged:(r1, r2) => r1 != r2}).cloneWithRows(rowData),
    })
    }
  })
  .catch((error)=>{
   alert(error);
  });
 }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
体验js中splice()的强大(插入、删除或替换数组的元素)
Jan 16 Javascript
JS中令人发指的valueOf方法介绍
Feb 22 Javascript
struts2+jquery+json实现异步加载数据(自写)
Jun 24 Javascript
浅析document.createDocumentFragment()与js效率
Jul 08 Javascript
js获取url中指定参数值的示例代码
Dec 14 Javascript
常用的JS验证和函数汇总
Dec 23 Javascript
AngularJS实现全选反选功能
Dec 08 Javascript
jQuery 获取屏幕高度、宽度的简单实现案例
May 17 Javascript
图片加载完成再执行事件的实例
Nov 16 Javascript
Vue组件间通信 Vuex的用法解析
Aug 05 Javascript
如何在wxml中直接写js代码(wxs)
Nov 14 Javascript
JavaScript使用canvas绘制随机验证码
Feb 17 Javascript
React Native日期时间选择组件的示例代码
Apr 27 #Javascript
vue实现点击展开点击收起效果
Apr 27 #Javascript
vue中post请求以a=a&amp;b=b 的格式写遇到的问题
Apr 27 #Javascript
vue项目中应用ueditor自定义上传按钮功能
Apr 27 #Javascript
Vue 使用 Mint UI 实现左滑删除效果CellSwipe
Apr 27 #Javascript
微信小程序中添加客服按钮contact-button功能
Apr 27 #Javascript
Node.js文件编码格式的转换的方法
Apr 27 #Javascript
You might like
PHP下利用header()函数设置浏览器缓存的代码
2010/09/01 PHP
基于MySQL到MongoDB简易对照表的详解
2013/06/03 PHP
php计算一个文件大小的方法
2015/03/30 PHP
一个完整的PHP类包含的七种语法说明
2015/06/04 PHP
PHP根据图片色界在不同位置加水印的方法
2015/07/01 PHP
浅谈Laravel中的一个后期静态绑定
2017/08/11 PHP
php mysql PDO 查询操作的实例详解
2017/09/23 PHP
javascript或asp实现的判断身份证号码是否正确两种验证方法
2009/11/26 Javascript
图片无缝滚动代码(向左/向下/向上)
2013/04/10 Javascript
借助JavaScript脚本判断浏览器Flash Player信息的方法
2014/07/09 Javascript
使用node.js半年来总结的 10 条经验
2014/08/18 Javascript
js判断浏览器版本以及浏览器内核的方法
2015/01/20 Javascript
原生js与jQuery实现简单的tab切换特效对比
2015/07/30 Javascript
JS上传组件FileUpload自定义模板的使用方法
2016/05/10 Javascript
基于NodeJS+MongoDB+AngularJS+Bootstrap开发书店案例分析
2017/01/12 NodeJs
详谈Node.js之操作文件系统
2017/08/29 Javascript
基于jQuery中ajax的相关方法汇总(必看篇)
2017/11/08 jQuery
vue中如何创建多个ueditor实例教程
2017/11/14 Javascript
vue 2.8.2版本配置刚进入时候的默认页面方法
2018/09/21 Javascript
[01:31](回顾)杀出重围,决战TI之巅
2014/07/01 DOTA
[00:27]DOTA2战队VP、Secret贺新春
2018/02/11 DOTA
python创建只读属性对象的方法(ReadOnlyObject)
2013/02/10 Python
对python 数据处理中的LabelEncoder 和 OneHotEncoder详解
2018/07/11 Python
python中pip的安装与使用教程
2018/08/10 Python
python 多线程中子线程和主线程相互通信方法
2018/11/09 Python
Appium Python自动化测试之环境搭建的步骤
2019/01/23 Python
python mac下安装虚拟环境的图文教程
2019/04/12 Python
PYQT5实现控制台显示功能的方法
2019/06/25 Python
Python求正态分布曲线下面积实例
2019/11/20 Python
CSS3绘制六边形的简单实现
2016/08/25 HTML / CSS
英国豪华针织品牌John Smedley的在线销售商:The Outlet by John Smedley
2018/04/08 全球购物
2014年教师个人工作总结
2014/11/10 职场文书
2014年办公室文秘工作总结
2014/12/09 职场文书
SQL IDENTITY_INSERT作用案例详解
2021/08/23 MySQL
gojs实现蚂蚁线动画效果
2022/02/18 Javascript
Python实现文字pdf转换图片pdf效果
2022/04/03 Python