react-native 给ScrollView添加上拉加载和下拉刷新

简介: react-native 给ScrollView添加上拉加载和下拉刷新

目录


上拉加载


添加onScrollEndDrag事件

  <ScrollView
     onScrollEndDrag={this.onMomentumScrollEnd}
  >
     ...
  </ScrollView>

onScrollEndDrag事件方法

属性值计算,offSetY + oriageScrollHeight >= contentSizeHeight - 1可判断下拉到底部

我加了pageLoadingFull属性判断是否加载全部数据,pageLoading用于节流防止加载过程中又触发加载。

  onMomentumScrollEnd = (event) => {
    const offSetY = event.nativeEvent.contentOffset.y; // 获取滑动的距离
    const contentSizeHeight = event.nativeEvent.contentSize.height; // scrollView  contentSize 高度
    const oriageScrollHeight = event.nativeEvent.layoutMeasurement.height; // scrollView高度
    const { pageLoadingFull, pageLoading } = this.state;
    console.log(`offSetY${offSetY}`);
    console.log(`oriageScrollHeight${oriageScrollHeight}`);
    console.log(`contentSizeHeight${contentSizeHeight}`);
    if (offSetY + oriageScrollHeight >= contentSizeHeight - 1) {
      if (!pageLoadingFull && !pageLoading) {
        this.loadMore();
      }
    }
  };

加载内容

  loadMore = async () => {
    //开始加载设置加载中进行节流
    this.setState({ pageLoading: true });
    const json = await ...//异步加载数据
    if(...){//数据若是加载后加载全部,则设置已经加载全部
      this.setState({ pageLoadingFull: true });
    }
    //加载结束
    this.setState({ pageLoading: false });
  };

底部提示

  import { TouchableOpacity, ActivityIndicator } from 'react-native';
  <View
    style={{
      // backgroundColor: 'blue',
      height: 40,
      zIndex: 10,
      justifyContent: 'center',
    }}
  >
    {pageLoadingFull ? (
      <Text style={{ textAlign: 'center' }}>没有更多了</Text>
        ) : pageLoading ? (
          <ActivityIndicator size='large' />
        ) : (
          <TouchableOpacity
            onPress={() => {
              this.loadMore();
            }}
          >
          <Text style={{ textAlign: 'center' }}>更多...</Text>
          </TouchableOpacity>
     )}
  </View>

下拉刷新


  <ScrollView
    // data={['']}
    // renderItem={this.renderPage}
    // onScroll={(e) => { console.log(e.target); }}
    refreshControl={
      <RefreshControl
        refreshing={this.state.refreshing}
        onRefresh={() => {
          this.setState({
            refreshing: true,
            pageLoadingFull: false,
          });
          this._load();
        }}
        tintColor='black'
        title={this.state.refreshing ? '刷新中' : '下拉刷新'}
        titleColor='black'
        colors={['white', 'gray', 'black']}
        progressBackgroundColor='lightblue'
      />
    }
  >
    ...
  </ScrollView>


相关文章
|
前端开发 JavaScript
【react】react移动端不规则瀑布流布局上拉加载更多
【react】react移动端不规则瀑布流布局上拉加载更多
387 0
|
移动开发 前端开发 JavaScript
|
1月前
|
前端开发 JavaScript 开发者
深入理解React Hooks:提升前端开发效率的关键
【10月更文挑战第5天】深入理解React Hooks:提升前端开发效率的关键
|
13天前
|
前端开发 JavaScript 开发者
颠覆传统:React框架如何引领前端开发的革命性变革
【10月更文挑战第32天】本文以问答形式探讨了React框架的特性和应用。React是一款由Facebook推出的JavaScript库,以其虚拟DOM机制和组件化设计,成为构建高性能单页面应用的理想选择。文章介绍了如何开始一个React项目、组件化思想的体现、性能优化方法、表单处理及路由实现等内容,帮助开发者更好地理解和使用React。
44 9
|
1月前
|
前端开发
深入解析React Hooks:构建高效且可维护的前端应用
本文将带你走进React Hooks的世界,探索这一革新特性如何改变我们构建React组件的方式。通过分析Hooks的核心概念、使用方法和最佳实践,文章旨在帮助你充分利用Hooks来提高开发效率,编写更简洁、更可维护的前端代码。我们将通过实际代码示例,深入了解useState、useEffect等常用Hooks的内部工作原理,并探讨如何自定义Hooks以复用逻辑。
|
1月前
|
前端开发 JavaScript API
探索React Hooks:前端开发的革命性工具
【10月更文挑战第5天】探索React Hooks:前端开发的革命性工具
|
1月前
|
前端开发 数据管理 编译器
引领前端未来:React 19的重大更新与实战指南🚀
React 19 即将发布,带来一系列革命性的新功能,旨在简化开发过程并显著提升性能。本文介绍了 React 19 的核心功能,如自动优化重新渲染的 React 编译器、加速初始加载的服务器组件、简化表单处理的 Actions、无缝集成的 Web 组件,以及文档元数据的直接管理。这些新功能通过自动化、优化和增强用户体验,帮助开发者构建更高效的 Web 应用程序。
100 1
引领前端未来:React 19的重大更新与实战指南🚀
|
18天前
|
前端开发 JavaScript Android开发
前端框架趋势:React Native在跨平台开发中的优势与挑战
【10月更文挑战第27天】React Native 是跨平台开发领域的佼佼者,凭借其独特的跨平台能力和高效的开发体验,成为许多开发者的首选。本文探讨了 React Native 的优势与挑战,包括跨平台开发能力、原生组件渲染、性能优化及调试复杂性等问题,并通过代码示例展示了其实际应用。
45 2
|
20天前
|
前端开发 JavaScript 开发者
React与Vue:前端框架的巅峰对决与选择策略
【10月更文挑战第23天】React与Vue:前端框架的巅峰对决与选择策略
|
20天前
|
前端开发 JavaScript 开发者
“揭秘React Hooks的神秘面纱:如何掌握这些改变游戏规则的超能力以打造无敌前端应用”
【10月更文挑战第25天】React Hooks 自 2018 年推出以来,已成为 React 功能组件的重要组成部分。本文全面解析了 React Hooks 的核心概念,包括 `useState` 和 `useEffect` 的使用方法,并提供了最佳实践,如避免过度使用 Hooks、保持 Hooks 调用顺序一致、使用 `useReducer` 管理复杂状态逻辑、自定义 Hooks 封装复用逻辑等,帮助开发者更高效地使用 Hooks,构建健壮且易于维护的 React 应用。
28 2