react-native-page-listview

对ListView/FlatList的封装,可以很方便的分页加载网络数据,还支持自定义下拉刷新View和上拉加载更多的View.兼容高版本FlatList和低版本ListVIew.组件会根据你使用的react-native的版本自动选择(高版本使用FlatList,低版本使用ListView)

github地址: https://github.com/geek-prince/react-native-page-listview

npm地址: https://www.npmjs.com/package/react-native-page-listview

安装

npm install react-native-page-listview --save

如何使用

下面说明中的'组件'指的就是当前这个'react-native-page-listview'组件.

首先导入组件

import PageListView from 'react-native-page-listview';

1.不分页,不从网络获取数据(用于本地数组数据的展示)

这时你只需要给组件传递一个数组

let arr=[你要在ListView上展示的数据数组]

在render方法中使用该组件

<PageListView
renderRow={this.renderRow}
refresh={this.refresh}
/>

renderRow方法中需要你指定每一行数据的展示View,与ListView/FlatListrenderRow/renderItem方法相同

renderRow(rowData,index){
return(<View>你的View展示</View>);
}

refresh方法中指定需要展示数据的数组

refresh=(callBack)=>{
callBack(arr);
}

2.不分页,从网络获取数据(用于网络数组数据不多,后端接口没有用分页时)

这时与上面使用方法一致,只需要更改一下refresh方法

refresh=(callBack)=>{
fetch(url)
.then((response)=>response.json())
.then((responseData)=>{
//根据接口返回结果得到数据数组
let arr=responseData.result;
callBack(arr);
});
}

以上这两种方式渲染结果如下(没有下拉刷新和上拉更多):

3.从网络获取数据并分页,不自定义上拉刷新,下拉加载更多View(用于数据较多,需要分页请求数据时)

这时你需要给组件一下几个属性pageLen,renderRow,refresh,loadMore.

<PageListView
pageLen={15}
renderRow={this.renderRow}
refresh={this.refresh}
loadMore={this.loadMore}
/>

pageLen指定你每次调用后端分页接口可以获得多少条数据.

renderRow使用方法和上面相同,渲染每一行的展示.

refresh方法会在你组件一开始加载和你下拉刷新时调用,所以你在这个方法中需要将你从后端分页接口的第一页请求返回的数据通过回调传给组件.

refresh=(callBack)=>{
fetch(分页接口url+'?page=1')
.then((response)=>response.json())
.then((responseData)=>{
//根据接口返回结果得到数据数组
let arr=responseData.result;
callBack(arr);
});
}

loadMore方法会在你下拉加载更多时调用,这时除了callBack还会传给你另一个参数page表示即将要加载的分页数据是第几页,这时你只需要根据page把相应第几页的数组数据通过回调传给组件就行.

loadMore=(page,callback)=>{
fetch(分页接口url+'?page='+page)
.then((response)=>response.json())
.then((responseData)=>{
//根据接口返回结果得到数据数组
let arr=responseData.result;
callBack(arr);
});
};

这种情况下显示的渲染效果为:

4.从网络获取数据并分页,并且自定义下拉刷新,上拉加载更多View

渲染下拉刷新View使用renderRefreshView,且此时需要给定它的高度renderRefreshViewH,渲染加载更多View使用renderLoadMore,渲染没有更多数据的View使用renderNoMore.

<PageListView
pageLen={15}
renderRow={this.renderRow}
refresh={this.refresh}
loadMore={this.loadMore}
//上面四个属性使用方法同上
renderRefreshView={this.renderRefreshView}
renderRefreshViewH={150}
renderLoadMore={this.renderLoadMore}
renderNoMore={this.renderNoMore}
/>
renderRefreshView=()=>{
return(
<View style={{}}>//你对渲染下拉刷新View的代码</View>
);
};
renderLoadMore=()=>{
return(
<View style={{}}>//你对渲染加载更多View的代码</View>
);
};
renderNoMore=()=>{
return(
<View style={{}}>//你对渲染没有更多数据时View的代码</View>
);
};

这种情况下显示的渲染效果为:

拓展

如果你想实现更好看更绚丽的下拉刷新效果,可以像下面这样使用renderRefreshView.

pullState会根据你下拉的状态给你返回相应的字符串:

  • '' : 没有下拉动作时的状态
  • 'pulling' : 正在下拉并且还没有拉到指定位置时的状态
  • 'pullOk' : 正在下拉并且拉到指定位置时并且没有松手的状态
  • 'pullRelease' : 下拉到指定位置后并且松手后的状态
renderRefreshView=(pullState)=>{
switch (pullState){
case 'pullOk':
return <View style={}>
//下拉刷新,下拉到指定的位置时,你渲染的View
</View>;
break;
case 'pullRelease':
return <View style={}>
//下拉刷新,下拉到指定的位置后,并且你松手后,你渲染的View
</View>;
break;
case '':
case 'pulling':
default:
return <View style={}>
//下拉刷新,你正在下拉时还没有拉到指定位置时(或者默认情况下),你渲染的View
</View>;
break;
}
};

这种情况下显示的渲染效果为:

有时候我们不一定会直接渲染从后端取回来的数据,需要对数据进行一些处理,这时可以在组件中加入dealWithDataArrCallBack属性来对数组数据进行一些处理.下面是把从后端取回来的数组进行顺序的颠倒.

<PageListView
//其他的属性...
dealWithDataArrCallBack={(arr)=>{return arr.reverse()}}
/>

另外,FlatList中有个属性为ItemSeparatorComponent是设置每一行View之间分割的View的,自己觉得不错就写到组件里了,兼容ListView.

属性一览表:

props 作用
renderRow 处理”渲染FlatList/ListView的每一行”的方法
refresh 处理”下拉刷新”或”一开始加载数据”的方法
loadMore 处理”加载更多”的方法
pageLen 每个分页的数据数
dealWithDataArrCallBack 如果需要在用当前后端返回的数组数据进行处理的话,传入回调函数
renderLoadMore 还有数据可以从后端取得时候渲染底部View的方法
renderNoMore 没有数据(数据已经从后端全部加载完)是渲染底部View的方法
renderRefreshView 渲染下拉刷新的View样式
renderRefreshViewH 渲染下拉刷新的View样式的高度
ItemSeparatorComponent 渲染每行View之间的分割线View
height 指定组件宽高,不指定时组件flex:1自适应宽高
width 指定组件宽高,不指定时组件flex:1自适应宽高
FlatList/ListView自身的属性 是基于FlatList/ListView,所以可以直接使用他们自身的属性

注意:如果屏幕下方有绝对定位的View时,这时组件自适应宽高,下面的一部分内容会被遮挡,这时一个很好的解决方法是在组件下方渲染一个与绝对定位等高的透明View来解决(<View style={{height:你绝对定位View的高度,backgroundColor:'#0000'}}/>).

如果大家觉得我的组件好用的话,帮到你的话,欢迎大家Star,Fork,如果有什么问题的话也可以在github中想我提出,谢谢大家的支持.

react-native-page-listview使用方法(自定义FlatList/ListView下拉刷新,上拉加载更多,方便的实现分页)的更多相关文章

  1. Android 自定义 ListView 上下拉动“刷新最新”和“加载更多”歌曲列表

    本文内容 环境 测试数据 项目结构 演示 参考资料 本文演示,上拉刷新最新的歌曲列表,和下拉加载更多的歌曲列表.所谓"刷新最新"和"加载更多"是指日期.演示代码 ...

  2. 自定义ListView下拉刷新上拉加载更多

    自定义ListView下拉刷新上拉加载更多 自定义RecyclerView下拉刷新上拉加载更多 Listview现在用的很少了,基本都是使用Recycleview,但是不得不说Listview具有划时 ...

  3. react-native 自定义 下拉刷新 / 上拉加载更多 组件

    1.封装 Scroller 组件 /** * 下拉刷新/上拉加载更多 组件(Scroller) */ import React, {Component} from 'react'; import { ...

  4. ListView下拉刷新上拉加载更多实现

    这篇文章将带大家了解listview下拉刷新和上拉加载更多的实现过程,先看效果(注:图片中listview中的阴影可以加上属性android:fadingEdge="none"去掉 ...

  5. listview下拉刷新上拉加载扩展(二)-仿美团外卖

    经过前几篇的listview下拉刷新上拉加载讲解,相信你对其实现机制有了一个深刻的认识了吧,那么这篇文章我们来实现一个高级的listview下拉刷新上拉加载-仿新版美团外卖的袋鼠动画: 项目结构: 是 ...

  6. MaterialRefreshLayout+ListView 下拉刷新 上拉加载

    效果图是这样的,有入侵式的,非入侵式的,带波浪效果的......就那几个属性,都给出来了,自己去试就行. 下拉刷新 上拉加载 关于下拉刷新-上拉加载的效果,有许许多多的实现方式,百度了一下竟然有几十种 ...

  7. ListView实现Item上下拖动交换位置 并且实现下拉刷新 上拉加载更多

    ListView实现Item上下拖动交换位置  并且实现下拉刷新  上拉加载更多 package com.example.ListViewDragItem; import android.app.Ac ...

  8. listview下拉刷新上拉加载扩展(三)-仿最新版美团外卖

    本篇是基于上篇listview下拉刷新上拉加载扩展(二)-仿美团外卖改造而来,主要调整了headview的布局,并加了两个背景动画,看似高大上,其实很简单: as源码地址:http://downloa ...

  9. 使用MJRefresh自定义下拉刷新,上拉加载动画

    有时候我们需要自己设置下拉刷新,上拉加载动画的实现,这里主要是记录下使用MJRefresh自定义下拉刷新,上拉加载动画..... 下拉刷新我们只需要继承MJRefreshGifHeader即可: 实现 ...

随机推荐

  1. Redis 数据结构 & 原理 & 持久化

    一 概述 redis是一种高级的key-value数据库,它跟memcached类似,不过数据可以持久化,而且支持的数据类型也很丰富. Redis支持五种数据类型:string(字符串),hash(哈 ...

  2. POJ3046ANT_COUNTING

    #include <iostream> #include <cstdio> #include <cstdlib> #include <cstring> ...

  3. .Net C# 签名字符串排序

    #region Get Sign Content /// <summary> /// Get Sign Content /// </summary> /// <param ...

  4. linux脚本监控应用且通过邮件报警异常

    一.背景 最近接到监控应用并通过邮件报警的任务,由于需求比较简单,故没有使用springboot那套,而是采用linux脚本的方式进行监控. 二.思路 通过linux自带的定时功能,定时执行一个lin ...

  5. android 自定义控件之NetWorkImageView 处理listview等控件中的图片加载乱序问题

    0.调用: BaseAdapter中设置方法 holder.iv.loadImage(url); adapter_xxx.xml 中 控件需要用 xxx.NetWorkImageView 1 NetW ...

  6. CSP-S2019「Symphony」

    NOTICE:如觉得本文有什么错误或不妥之处,欢迎评论区以及私信交流,反对乱喷,如有一些让人不爽的评论或人身攻击,带来的后果本人一律不负责 准备工作 Day-inf~Day-3 000 every d ...

  7. JavaScript02

    一. 判断// 三元表达式// 循环// 判断: 用的最多的就是if判断// 1.// if(条件){// 当条件满足以后执行的语句// } // 2.// if(条件){// // }else{// ...

  8. hbulider 快捷键

    跳转到行        Ctrl + G   页首        Ctrl + Home   页尾        Ctrl + End   下一个选项卡        Ctrl + Tab   上一个 ...

  9. Django_04_视图

    视图 后台管理页面做好了,接下来就要做公共访问的页面了 对于django的设计框架MVT,用户在URL中请求的是视图,视图接收请求后进行处理,并将处理的结果返回给请求者 使用视图时需要进行两步操作 1 ...

  10. meta 中的属性viewport

    粘贴自:https://blog.csdn.net/u012402190/article/details/70172371 <meta name="viewport" con ...