跳到主要内容

SectionList

一个用于渲染分节列表的高性能接口,支持最便捷的功能

  • 完全跨平台。
  • 可配置的可视性回调。
  • 支持列表头。
  • 支持列表尾。
  • 支持项目分隔符。
  • 支持节头。
  • 支持节分隔符。
  • 支持异构数据和项目渲染。
  • 下拉刷新。
  • 滚动加载。

如果您不需要分节支持并希望使用更简单的接口,请使用 <FlatList>

示例

这是 <VirtualizedList> 的一个便捷封装,因此它继承了其属性(以及 <ScrollView> 的属性),此处未明确列出的属性以及以下注意事项:

  • 当内容滚动出渲染窗口时,内部状态不会被保留。请确保所有数据都捕获在项目数据或外部存储中,如 Flux、Redux 或 Relay。
  • 这是一个 PureComponent,这意味着如果 props 保持浅相等,它将不会重新渲染。请确保 renderItem 函数所依赖的一切都作为属性(例如 extraData)传入,并且在更新后不为 ===,否则您的 UI 可能不会随着更改而更新。这包括 data 属性和父组件状态。
  • 为了限制内存并实现平滑滚动,内容会在屏幕外异步渲染。这意味着滚动速度可能快于填充速度,并暂时看到空白内容。这是一种权衡,可以根据每个应用程序的需求进行调整,我们正在幕后努力改进它。
  • 默认情况下,列表会在每个项目上查找 key 属性并将其用作 React 键。或者,您可以提供自定义的 keyExtractor 属性。

参考

属性

VirtualizedList 属性

继承 VirtualizedList 属性


必需
renderItem

每个节中每个项目的默认渲染器。可以按节覆盖。应返回一个 React 元素。

类型
函数

渲染函数将传入一个包含以下键的对象

  • 'item'(对象)- 此节 data 键中指定的项目对象
  • 'index'(数字)- 项目在该节中的索引。
  • 'section'(对象)- sections 中指定的完整节对象。
  • 'separators'(对象)- 一个包含以下键的对象
    • 'highlight'(函数)- () => void
    • 'unhighlight'(函数)- () => void
    • 'updateProps'(函数)- (select, newProps) => void
      • 'select'(枚举)- 可能的值为 'leading', 'trailing'
      • 'newProps'(对象)

必需
sections

要渲染的实际数据,类似于 FlatList 中的 data 属性。

类型
Section 数组

extraData

一个标记属性,用于告知列表重新渲染(因为它实现了 PureComponent)。如果您的 renderItem、Header、Footer 等函数中的任何一个依赖于 data 属性之外的任何内容,请将其放在此处并将其视为不可变。

类型
任意类型

initialNumToRender

初始批次中要渲染的项目数量。这应该足以填满屏幕,但不要过多。请注意,为了提高滚动到顶部操作的感知性能,这些项目永远不会作为窗口化渲染的一部分被卸载。

类型默认
数字10

inverted

反转滚动方向。使用 -1 的缩放变换。

类型默认
布尔值false

ItemSeparatorComponent

在每个项目之间渲染,但不在顶部或底部。默认情况下,提供 highlightedsection[leading/trailing][Item/Section] 属性。renderItem 提供 separators.highlight/unhighlight,这将更新 highlighted 属性,但您也可以使用 separators.updateProps 添加自定义属性。可以是 React 组件(例如 SomeComponent),也可以是 React 元素(例如 <SomeComponent />)。

类型
组件,函数,元素

keyExtractor

用于提取指定索引处给定项目的唯一键。键用于缓存和作为 React 键来跟踪项目的重新排序。默认提取器会检查 item.key,然后是 item.id,然后回退到使用索引,就像 React 所做的那样。请注意,这会为每个项目设置键,但每个总体节仍然需要自己的键。

类型
(item: object, index: number) => string

ListEmptyComponent

列表为空时渲染。可以是 React 组件(例如 SomeComponent),也可以是 React 元素(例如 <SomeComponent />)。

类型
组件,元素

ListFooterComponent

渲染在列表的末尾。可以是 React 组件(例如 SomeComponent),也可以是 React 元素(例如 <SomeComponent />)。

类型
组件,元素

ListHeaderComponent

渲染在列表的最开始。可以是 React 组件(例如 SomeComponent),也可以是 React 元素(例如 <SomeComponent />)。

类型
组件,元素

onRefresh

如果提供,将添加一个标准的 RefreshControl 以实现“下拉刷新”功能。请确保也正确设置 refreshing 属性。要将 RefreshControl 从顶部偏移(例如 100 像素),请使用 progressViewOffset={100}

类型
函数

onViewableItemsChanged

当行视图可见性发生变化时调用,由 viewabilityConfig 属性定义。

类型
(callback: {changed: ViewToken[], viewableItems: ViewToken[]}) => void

refreshing

等待刷新获取新数据时,将其设置为 true。

类型默认
布尔值false

removeClippedSubviews

注意:在某些情况下可能存在错误(内容缺失)——请自行承担风险使用。

这可能会提高大型列表的滚动性能。

类型默认
布尔值false

renderSectionFooter

渲染在每个节的底部。

类型
(info: {section: Section}) => element | null

renderSectionHeader

渲染在每个节的顶部。在 iOS 上,这些节头默认会吸附在 ScrollView 的顶部。请参阅 stickySectionHeadersEnabled

类型
(info: {section: Section}) => element | null

SectionSeparatorComponent

渲染在每个节的顶部和底部(请注意这与 `ItemSeparatorComponent` 不同,后者仅在项目之间渲染)。它们旨在将节与上方和下方的标题分开,并且通常与 `ItemSeparatorComponent` 具有相同的突出显示响应。还接收 `highlighted`、`[leading/trailing][Item/Section]` 以及来自 `separators.updateProps` 的任何自定义属性。

类型
组件,元素

stickySectionHeadersEnabled

使节头吸附在屏幕顶部,直到下一个节头将其推出。仅在 iOS 上默认启用,因为这是该平台的标准。

类型默认
布尔值false
安卓

true
iOS

方法

flashScrollIndicators()
iOS

tsx
flashScrollIndicators();

暂时显示滚动指示器。


recordInteraction()

tsx
recordInteraction();

告知列表已发生交互,这应触发可见性计算,例如当 waitForInteractions 为 true 且用户尚未滚动时。这通常通过点击项目或导航操作来调用。


scrollToLocation()

tsx
scrollToLocation(params: SectionListScrollParams);

滚动到指定 sectionIndexitemIndex(在节内)的项目,使其在可见区域中定位,其中 viewPosition 0 表示项目位于顶部(可能会被吸附标题遮盖),1 表示位于底部,0.5 表示居中。

注意:如果不指定 getItemLayoutonScrollToIndexFailed 属性,则无法滚动到渲染窗口之外的位置。

参数

名称类型
params
必需
对象

有效的 params 键为

  • 'animated'(布尔值)- 列表滚动时是否应执行动画。默认为 true
  • 'itemIndex'(数字)- 要滚动到的项目在节内的索引。必需。
  • 'sectionIndex'(数字)- 包含要滚动到的项目的节的索引。必需。
  • 'viewOffset'(数字)- 用于偏移最终目标位置的固定像素数,例如,用于补偿吸附标题。
  • 'viewPosition'(数字)- 值为 0 将索引指定的项目放在顶部,1 放在底部,0.5 居中。

类型定义

Section

一个标识给定节要渲染的数据的对象。

类型
任意类型

属性

名称类型描述
data
必需
数组此节中用于渲染项目的数据。对象数组,非常类似于 FlatList 的 data 属性
key字符串可选键,用于跟踪节的重新排序。如果您不打算重新排序节,将默认使用数组索引。
renderItem函数可选地为该节定义一个任意的项目渲染器,覆盖列表的默认 renderItem
ItemSeparatorComponent组件,元素可选地为该节定义一个任意的项目分隔符,覆盖列表的默认 ItemSeparatorComponent
keyExtractor函数可选地为该节定义一个任意的键提取器,覆盖默认的 keyExtractor