我直接封装成了一个组件

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实现的下拉刷新和上拉触底加载的更多相关文章

  1. Android 实现下拉刷新和上拉加载更多的RECYCLERVIEW和SCROLLVIEW

    PullRefreshRecyclerView.java /** * 类说明:下拉刷新上拉加载更多的RecyclerView * Author: gaobaiq * Date: 2016/5/9 18 ...

  2. React Native 之FlatList 下拉刷新和上拉加载更多

    接上一篇代码: 只修改了FlatListDemo.js里面的代码 import React, {Fragment,Component} from 'react'; import { SafeAreaV ...

  3. 基于iscroll.js实现下拉刷新和上拉加载特效

    现在已经不是纯Android独霸天下的时代了,H5嵌入Android的Hybrid混合开发是大势所趋.今天给大家带来的就是移动端中常见的"上拉刷新,下拉加载"特效,这个特效将会基于 ...

  4. Android ScrollView和ListView联用,且ListView可以下拉刷新和上拉加载

    ScrollView嵌套listView且ListView可以实现上拉加载. 由于代码太长,在此只提供实现思路: 先不说上拉加载的事,咱们先回想一下,ScrollView和LsitView联用,时的解 ...

  5. 在react中引入下拉刷新和上拉加载

    1. 首先引入插件 import ReactPullLoad, {STATS} from 'react-pullload' 2. 初始化: constructor(props) { super(pro ...

  6. Android实战简易教程-第二十五枪(基于Baas的数据表查询下拉刷新和上拉载入实现!)

    上一节我们实现了数据表的载入,可是,当数据表数据非常多时.我们就要考虑数据的分页.这里我们选用了PullToRefreshListView控件,先看一下该控件的说明: 效果图:            ...

  7. js的下拉刷新和上拉加载,基于iScroll v4.2.5

    html部分 <div id="wrapper" style="height: 100%"> <div id="scroller&q ...

  8. 基于SwiperJs的H5/移动端下拉刷新上拉加载更多的效果

    最早时,公司的H5项目中曾用过点击一个"加载更多"的DOM元素来实现分页的功能,后来又用过网上有人写的一个上拉加载更多的插件,那个插件是页面将要滚动到底部时就自动请求数据并插入到页 ...

  9. 基于SwiperJs的H5/移动端下拉刷新上拉加载更多

    最早时,公司的H5项目中曾用过点击一个"加载更多"的DOM元素来实现分页的功能,后来又用过网上有人写的一个上拉加载更多的插件,那个插件是页面将要滚动到底部时就自动请求数据并插入到页 ...

随机推荐

  1. shell for 循环简单用法

    for循环:固定有限次数循环,工作中for使用最多. 语法1: for 变量名 in 变量取值列表 do 指令… done 学习方法:记住下面的内容 for 男人 in 世界 do if [ 有房 ] ...

  2. C#中[STAThread]的作用

    [STAThread]STAThread:Single Thread Apartment Thread.(单一线程单元线程)[]是用来表示Attributes: [STAThread]是一种线程模型, ...

  3. webpack与浏览器缓存

    根据之前的配置,假设文件上传至服务器中,没有加hash,如果页面内容有更改,浏览器刷新的时候,请求的还是原先的文件,也就是浏览器的缓存,因为名字没有变.现在我们在上线的webpack配置中加上hash ...

  4. Ubuntu系统---安装“搜狗拼音法”导致桌面打不开

    Ubuntu系统---安装“搜狗拼音法”导致桌面打不开 ubuntu系统中文版,安装完后,自带中文输入法.中文用着好好的,用一段时间后,就会莫名的出现,切换不过来,中文输入不好用了.只是简单想装一个搜 ...

  5. CSRF防御

    一.通过 referer.token 或者 验证码 来检测用户提交. <meta name="referrer" content="never"> ...

  6. [唐胡璐]Selenium技巧 - 定制元素属性检查,并写到ReportNG中

    QTP 和Selenium 都会有这种要检查某一个控件元素属性的情况,比如去检查一个Button的显示文字是什么? 为了更方便的书写程序,并优美的显示到HTML测试报告中,做了以下几个小小的封装,只是 ...

  7. vue1 get,post交互及百度下拉列表demo

  8. windows 端口转发 netsh

    原文地址 listenaddress # 本地监听的ip listenport # 本地监听的端口 connectaddress # 转发请求接收的主机ip connectport # 转发请求接收的 ...

  9. django-rest-framework --- 基础简介

    目录 drf知识点 --- 后台 django restframework介绍 drf框架安装 接口 接口组成 如何写接口 接口组成的两大部分 接口文档 Postman接口工具使用 基于resrful ...

  10. 编译安装PTLib和H.323 Plus Core

    下载PTLib和H.323 Plus Core,官方网站很容易下载:http://www.h323plus.org/source/. 我下载这两个库后存放到目录/home/ynq/h323plus下, ...