react native Expo完全基于ScrollView实现的下拉刷新和上拉触底加载
我直接封装成了一个组件
props参数为
static propTypes = {
style:PropTypes.object, // 样式
refreshing:PropTypes.bool.isRequired,//是否开始下拉刷新动画
refreshBegin: PropTypes.func,// 开始下拉刷新回调
scrollEnd: PropTypes.func,// 触底回调
};
使用示例
import React from 'react';
import {
View,
} from 'react-native';
import styles from './style';
import HomeSwiper from "../../../components/HomeSwiper";
import HomeVideo from "../../../components/HomeVideo";
import ScrollViewPull from "../../../components/ScrollViewPull";
import {connect} from 'react-redux'; // 引入connect函数
import {
getHomeSwiper,
getHomeVideoCard,
handleRefreshStatus
} from '../../../actions/homeRecommendAction'; class HomeRecommend extends React.Component {
constructor(props) {
super(props);
this.state = {
refreshing: false,
};
} componentDidMount(){
const {homeVideoCard} = this.props;
this.props.getVideoCard(undefined,1,homeVideoCard);
this.props.getSwiper();
} // 触底
handleScrollEnd = () => {
const {currentPage,lastPage,homeVideoCard} = this.props;
if(currentPage === lastPage){
this.props.getVideoCard(undefined,currentPage+1,homeVideoCard);
}
}; // 开始下拉刷新
handleRefreshBegin = () => {
const {homeVideoCard} = this.props;
this.props.getChangeRefresh(true);
this.props.getSwiper();
this.props.getVideoCard(undefined,1,homeVideoCard);
}; render() {
const {navigation,swiperData,leftVideoData,rightVideoData,refreshing} = this.props;
return (
<ScrollViewPull
style={styles.scroll}
refreshing={refreshing}
scrollEnd={()=>this.handleScrollEnd()} // 触底回调
refreshBegin={()=>this.handleRefreshBegin()} // 开始下拉刷新回调
>
<View style={styles.container}>
<HomeSwiper
navigation={navigation}
swiperData={swiperData}
/>
<View style={styles.border}/>
<HomeVideo
navigation={navigation}
leftVideoData={leftVideoData}
rightVideoData={rightVideoData}
/>
</View>
</ScrollViewPull>
);
}
} const mapStateToProps = (state) => ({
swiperData : state.homeRecommend.homeSwiperData,
currentPage : state.homeRecommend.currentPage,
homeVideoCard: state.homeRecommend.homeVideoCard,
leftVideoData : state.homeRecommend.leftVideoData,
rightVideoData : state.homeRecommend.rightVideoData,
refreshing: state.homeRecommend.refreshing
}); const mapDispatchToProps = (dispatch) => ({
getSwiper(){
dispatch(getHomeSwiper());
},
getChangeRefresh(refresh){
dispatch(handleRefreshStatus(refresh));
},
getVideoCard(id,page,homeVideoCard){
dispatch(getHomeVideoCard(id,page,homeVideoCard));
},
}); export default connect(mapStateToProps,mapDispatchToProps)(HomeRecommend);
组件全部代码为:
import React from 'react';
import {
ScrollView,
RefreshControl,
} from 'react-native';
import PropTypes from 'prop-types'; class ScrollViewPull extends React.Component {
static navigationOptions = {
header: null,
}; static propTypes = {
style:PropTypes.object, // 样式
refreshing:PropTypes.bool.isRequired,//是否开始下拉刷新动画
refreshBegin: PropTypes.func,// 开始下拉刷新回调
scrollEnd: PropTypes.func,// 触底回调
}; constructor(props) {
super(props);
this.initState();
} initState=()=>{ }; onRefresh = () => {
this.props.refreshBegin();
}; // 监听上拉触底
_contentViewScroll = (e: Object) => {
let offsetY = e.nativeEvent.contentOffset.y; //滑动距离
let contentSizeHeight = e.nativeEvent.contentSize.height; //scrollView contentSize高度
let oriageScrollHeight = e.nativeEvent.layoutMeasurement.height; //scrollView高度
if (offsetY + oriageScrollHeight >= contentSizeHeight){
this.props.scrollEnd();
}
}; render() {
const {children,refreshing,style} = this.props;
return (
<ScrollView
style={[{flex:1},style]}
showsVerticalScrollIndicator={false}
scrollToIndex
refreshControl={
<RefreshControl
refreshing={refreshing}
onRefresh={this.onRefresh}
/>
}
onMomentumScrollEnd = {this._contentViewScroll}
>
{children}
</ScrollView>
);
}
} export default ScrollViewPull;
react native Expo完全基于ScrollView实现的下拉刷新和上拉触底加载的更多相关文章
- Android 实现下拉刷新和上拉加载更多的RECYCLERVIEW和SCROLLVIEW
PullRefreshRecyclerView.java /** * 类说明:下拉刷新上拉加载更多的RecyclerView * Author: gaobaiq * Date: 2016/5/9 18 ...
- React Native 之FlatList 下拉刷新和上拉加载更多
接上一篇代码: 只修改了FlatListDemo.js里面的代码 import React, {Fragment,Component} from 'react'; import { SafeAreaV ...
- 基于iscroll.js实现下拉刷新和上拉加载特效
现在已经不是纯Android独霸天下的时代了,H5嵌入Android的Hybrid混合开发是大势所趋.今天给大家带来的就是移动端中常见的"上拉刷新,下拉加载"特效,这个特效将会基于 ...
- Android ScrollView和ListView联用,且ListView可以下拉刷新和上拉加载
ScrollView嵌套listView且ListView可以实现上拉加载. 由于代码太长,在此只提供实现思路: 先不说上拉加载的事,咱们先回想一下,ScrollView和LsitView联用,时的解 ...
- 在react中引入下拉刷新和上拉加载
1. 首先引入插件 import ReactPullLoad, {STATS} from 'react-pullload' 2. 初始化: constructor(props) { super(pro ...
- Android实战简易教程-第二十五枪(基于Baas的数据表查询下拉刷新和上拉载入实现!)
上一节我们实现了数据表的载入,可是,当数据表数据非常多时.我们就要考虑数据的分页.这里我们选用了PullToRefreshListView控件,先看一下该控件的说明: 效果图: ...
- js的下拉刷新和上拉加载,基于iScroll v4.2.5
html部分 <div id="wrapper" style="height: 100%"> <div id="scroller&q ...
- 基于SwiperJs的H5/移动端下拉刷新上拉加载更多的效果
最早时,公司的H5项目中曾用过点击一个"加载更多"的DOM元素来实现分页的功能,后来又用过网上有人写的一个上拉加载更多的插件,那个插件是页面将要滚动到底部时就自动请求数据并插入到页 ...
- 基于SwiperJs的H5/移动端下拉刷新上拉加载更多
最早时,公司的H5项目中曾用过点击一个"加载更多"的DOM元素来实现分页的功能,后来又用过网上有人写的一个上拉加载更多的插件,那个插件是页面将要滚动到底部时就自动请求数据并插入到页 ...
随机推荐
- 【Hibernate】入门
一.Hibernate框架的概述 1.1 什么是Hibernate 1.2 Hibernate优点 二.Hibernate的日志记录 三.Hibernate 入门程序 3.1 引入依赖(5.x版本) ...
- java - day010 - 基本类型包装,自动装箱和拆箱,日期,集合
基本类型的包装类 byte Byte short Short int Integer long Long float Float double Double char Character boolea ...
- 剑指Offer编程题(python)——二叉树
1.重建二叉树 """ 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字. 例如输入前序遍历序列{1,2,4 ...
- 【转】Golang关于channel传递引用引发的坑
原文: https://studygolang.com/articles/12310/comment/17923 ------------------------------------------- ...
- Css案例整理
1.实现两个div并排显示 案例:checkbox的标题和内容需要并排显示,checkbox竖向排列 <head> <style type="text/css"& ...
- 让DuiLib CheckBox支持全选、全不选、非全选三种状态
原文 https://blog.csdn.net/EveyX/article/details/38433783 DuiLib官方库中的Checkbox只有Checked和Uncheck两种状态,但我们 ...
- 第六章 Flask-WTF(二)
Flask-WTF Flask-WTF是简化了WTForms操作的一个第三方库. WTForms表单的两个主要功能是验证用户提交数据的合法性以及渲染模板. 当然还包括一些其他的功能:CSRF保护,文件 ...
- 洛谷P1373 小a和uim之大逃离【线性dp】
题目:https://www.luogu.org/problemnew/show/P1373 题意: 有一个n*m的地图,每个点上有一个数值.两个人在任一点开始任一点结束,只能往右或往下走,轮流收集数 ...
- Appium自动化测试教程-自学网-adb命令
adb命令: adb ( Android Debug Bridge)是一个通用命令行工具,其允许您与模拟器实例或连接的 Android 设备进行通信.它可为各种设备操作提供便利,如安装和调试应用. T ...
- java实现大文件上传和下载
[文件上传和下载]是很多系统必备功能, 比如PM\OA\ERP等:系统中常见的开发模式有B/S和C/S,而前者主要是通过浏览器来访问web服务器,一般采用七层协议中的[应用层http]进行数据传输,后 ...