使用 React Native 中的 FlatList 组件显示列表

发布日期:2026-07-03 21:36:02   来源 : 杭州电子商务研究院    浏览量 :3
杭州电子商务研究院 发布日期:2026-07-03 21:36:02  
3

简介列表是显示类似类型数据对象的常见可滚动组件之一。列表就像是ScrollView组件的增强版,用于显示数据。React Native 提供了一个FlatList组件来创建列表。FlatList仅渲染可在屏幕上显示的列表项。此外,FlatList还提供许多内置功能,如垂直/水平滚动、页眉/页脚视图、分隔符、下拉刷新、延迟加载等。本指南将解释使用 React Native 中的TheCatsAPI创建和优化猫图像列表的重要细节

FlatList 基础知识

FlatList 是VirtualizedList组件的专门实现,用于显示当前窗口内可容纳的有限数量的项目。其余项目将通过列表滚动操作进行渲染。FlatList 可以简单地使用 datarenderItem属性来实现,以创建列表。还有许多其他可选属性可用于添加更多功能,因此可以将属性分为主要属性可选属性

主要道具

  • 数据采用any类型的项目数组来填充列表中的项目。
  • renderItem需要一个函数,该函数以数据源中的 item 对象作为输入来构造并返回列表项组件。

可选道具

可选道具用于使用项目分隔符、页眉/页脚、下拉刷新、处理刷新或优化逻辑来装饰 FlatList:

  • ItemSeparatorComponent用于添加分隔符以在视觉上分隔项目。
  • keyExtractor用于提供唯一值(ID、电子邮件等),以避免通过跟踪项目的重新排序来重新创建列表。
  • extraData采用布尔值来重新渲染当前列表。FlatList 是一个PureComponent,它不会根据状态props对象中的任何变化而重新渲染,因此如果数据数组正在发生变化,则使用extraData prop 来重新渲染当前列表。
  • 为了提高效率, initialNumToRender用于渲染 FlatList 中的最少数量的项目组件。
  • ListEmptyComponent用于在下载数据时显示一个空视图。
  • ListHeaderComponent用于添加标题组件,如搜索、菜单项等。
  • ListFooterComponent用于添加页脚组件,如总项目数、数据摘要等。
  • getItemLayout返回列表项组件的预定义大小,以跳过运行时的尺寸计算过程,加快渲染过程。
  • Horizo​​ntal prop 采用布尔值来创建水平列表,通过返回类似Horizo​​ntal={true}
  • numColumns用于创建基于列的列表。
  • onRefreshrefreshing用于实现下拉刷新控件,并使用布尔标志维护其可见性。
  • onEndReachedonEndReachedThreshold用于实现给定阈值的延迟加载回调。还有其他 props可用于实现样式、滚动等。

下载列表数据

为了获取模拟响应,请使用TheCatsAPI搜索请求 API ,它不需要任何注册或 API 密钥。网络请求可以简单地使用获取请求来实现:

      fetchCats() {
  fetch('https://api.thecatapi.com/v1/images/search?limit=10&page=1') // 1
      .then(res => res.json()) // 2
      .then(resJson => {
          this.setState({ data: resJson }); // 3
      }).catch(e => console.log(e));
}
    

上述请求将:

  1. 从第一页开始下载限制为十张图片的数据
  2. 将响应转换为 JSON 对象。
  3. 使用setState函数将转换后的响应 JSON 对象作为data键的值存储在state对象中。

实现列表项生成器函数

获取请求将向FlatList的主要 props 之一提供数据。现在实现一个函数来为renderItem prop返回一个列表项组件

      renderItemComponent = (itemData) => // 1
  <TouchableOpacity>   // 2
      <Image style={styles.image} source={{ uri: itemData.item.url }} /> // 3
  </TouchableOpacity>
    

响应中的关键字段是用于下载和显示图像的URL 。以下步骤解释了renderItemComponent函数的工作原理:

  1. 将对象作为 UI 组件将使用的参数。
  2. TouchableOpacity组件用于实现点击监听器,因为Image组件没有onPress prop。
  3. 图像组件以 URI 作为源数据显示图像。它将自动下载图像。

实现 FlatList

react-native模块导入FlatList组件,使用数据renderItemComponent创建列表

      render() {
  return (
    <SafeAreaView>
      <FlatList
        data={this.state.data}
        renderItem={item => this.renderItemComponent(item)}
      />
    </SafeAreaView>)
}
    

this.state.data将由fetch请求更新,并触发FlatList组件中的重新渲染过程。上述实现工作正常,但接下来的步骤将添加更多功能以改进FlatList实现

实现 KeyExtractor

React 始终使用唯一键来跟踪组件中的更新。默认情况下,FlatList在数据项中查找自定义keyExtractor实现或名为key的字段,否则将使用数组索引作为key的。id是响应中可用于实现keyExtractor的唯一值:

      render() {
  return (
    <SafeAreaView>
      <FlatList
        data={this.state.data}
        renderItem={item => this.renderItemComponent(item)}
        keyExtractor={item => item.id.toString()}
      />
    </SafeAreaView>)
}
    

实现分隔符

分隔符是放置在列表项之间的组件。可以使用View组件来实现:

      ItemSeprator = () => <View style={{
  height: 2,
  width: "100%",
  backgroundColor: "rgba(0,0,0,0.5)",
}} />

<FlatList
    //...
    ItemSeparatorComponent={this.ItemSeprator}
/>
    

就像ItemSeparatorComponent一样,可以为ListFooterComponentListHeaderComponent属性实现不同的组件

实现下拉刷新

下拉刷新实现需要为刷新prop 提供一个布尔标志来隐藏/显示加载指示。handleRefresh是 onRefresh prop 的一个函数,用于更新数据和加载指示器:

      handleRefresh = () => {
    this.setState({ refreshing: false }, ()=>{this.fetchCats()});
}
<FlatList
    //...
    refreshing={this.state.refreshing}
    onRefresh={this.handleRefresh}
/>)
    

在fetch调用之前将refreshing的值设置为true ,以显示加载指示。如果响应成功或出现错误,则将</

以上内容来自杭州电子商务研究院推送
关注
关于我们
热门推荐
合作伙伴
免责声明:本站部分资讯来源于网络,如有侵权请及时联系客服,我们将尽快处理
Copyright © 2025-2027 ToB产业网址导航 公安备案 浙公网安备33010602013138号 浙ICP备16025413号-9
支持 反馈 关注 数据