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. Dijstra_优先队列_前向星

    Dijstra算法求最短路径 具体实现方式 设置源点,将源点从原集u{}中取出并放入新建集s{} 找出至源点最近的点q从原集取出放入新集s{} 由q点出发,更新所有由q点能到达的仍处于原集的点到源点的 ...

  2. python3启航

    Python3的基本数据类型 数字 int ,所有功能都放在int里 a1 = 123 a2 = 456 ##int 将字符串转换为数字 a = "123" print(tyep( ...

  3. Go语言之依赖管理

    Go语言之依赖管理 Go语言的依赖管理随着版本的更迭正逐渐完善起来. 依赖管理 为什么需要依赖管理 最早的时候,Go所依赖的所有的第三方库都放在GOPATH这个目录下面.这就导致了同一个库只能保存一个 ...

  4. MGR+Consul集群

    [root@mydb1 ~]# wget https://releases.hashicorp.com/consul/1.4.0/consul_1.4.0_linux_amd64.zip[root@m ...

  5. 有趣的后渗透工具 Koadic

    koadic是DEFCON黑客大会上分享出来的的一个后渗透工具,虽然和msf有些相似,但是Koadic主要是通过使用Windows ScriptHost(也称为JScript / VBScript)进 ...

  6. JavaScript笔记(5)

    1.DOM操作 常用的DOM操作 document.getElementById(id); //返回指定id的元素,通用 document.getElementsByTagName(tagName); ...

  7. C++ STL 之 vector

    #include <iostream> #include <vector> using namespace std; void printVector(vector<in ...

  8. Java后端开发常用工具

    Java后端开发常用工具推荐: 俗话说,工欲善其事,必先利其器.不过初学时候不大建议过度依赖IDE等过多工具,这会让自己的编程基础功变得很差,比如各种语法的不熟悉,各种关键字比如synchronize ...

  9. oracle索引查询

    /*<br>* *查看目标表中已添加的索引 * */ --在数据库中查找表名 select * from user_tables where  table_name like 'table ...

  10. MySQL时间类型及获取、展示处理

    MySQL时间格式 mysql所支持的日期时间类型有:DATETIME. TIMESTAMP.DATE.TIME.YEAR. 几种类型比较如下: 日期时间类型 占用空间 日期格式 最小值 最大值 零值 ...