我直接封装成了一个组件

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. linux环境下composer的安装与使用

    一.下载 Composer(安装前请务必确保已经正确安装了 PHP.打开命令行窗口并执行 php -v 查看是否正确输出版本号.) 1.下载安装脚本 - composer-setup.php - 到当 ...

  2. Django drf:序列化增删改查、局部与全局钩子源码流程、认证源码分析、执行流程

    一.序列化类的增.删.改.查 用drf的序列化组件   -定义一个类继承class BookSerializer(serializers.Serializer):   -写字段,如果不指定source ...

  3. select函数的详细使用(C语言)

    Select在Socket编程中还是比较重要的,可是对于初学Socket的人来说都不太爱用Select写程序,他们只是习惯写诸如connect.accept.recv或recvfrom这样的阻塞程序( ...

  4. PHP实现月份自动加1

    <?php date_default_timezone_set('PRC'); $date = date("Y-m-d"); $firstday = date('Y-m-01 ...

  5. Maya cmds polyOptions() 获取和设置 mesh 的属性

    Maya cmds polyOptions() 获取和设置 mesh 的属性 举例: cmds.polyOptions(dt = True) # 显示所有选择的 mesh 的三角化线(四边形的对角虚线 ...

  6. 部署 & virtualen

    安装:apt-get install virtualen virtualenv --no-site-packages venv 加上了参数--no-site-packages,这样,已经安装到系统Py ...

  7. android-studio打包APK出现有关apk图标问题

    报的错很多,有build gradle中的两个大红感叹号,由此引发了一大堆问题 注意到最后出现红色打包错误的代码: Failed to read PNG signature: file does no ...

  8. MySQL之InnoDB索引面试学习笔记

    写在前面 想要做好后台开发,终究是绕不过索引这一关的.先问自己一个问题,InnoDB为什么选择B+树作为默认索引结构.本文主要参考MySQL索引背后的数据结构及算法原理和剖析Mysql的InnoDB索 ...

  9. 浅析pagehelper分页原理(转)

    之前项目一直使用的是普元框架,最近公司项目搭建了新框架,主要是由公司的大佬搭建的,以springboot为基础.为了多学习点东西,我也模仿他搭了一套自己的框架,但是在完成分页功能的时候,确遇到了问题. ...

  10. python修改linux主机ip

    修改虚拟机的主机ip 和hostname import os, sys def conf_ip(ip): iplist = [] f = open("/etc/sysconfig/netwo ...