跳到主要内容
版本:0.81

SectionList

一个用于渲染分区列表的高性能接口,支持以下最实用的功能:

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

如果你不需要分区支持且想要更简单的接口,请使用 <FlatList>

示例

这是 <VirtualizedList> 的便捷包装器,因此继承了其属性(以及 <ScrollView> 的属性),除非此处明确列出,并注意以下注意事项:

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

参考

属性

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 pts),使用 progressViewOffset={100}

类型
函数

onViewableItemsChanged

当行的可见性变化时调用,由 viewabilityConfig 属性定义。

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

refreshing

在等待刷新新数据时将其设置为 true。

类型默认值
布尔值false

removeClippedSubviews

注意

在某些情况下使用此属性可能导致错误(内容缺失)- 使用风险自负。

true 时,离屏子视图在离屏时从其原生备份父视图中移除。这可能会提高大列表的滚动性能。在 Android 上默认值为 true

类型
布尔值

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
Android

true
iOS

方法

flashScrollIndicators()
iOS

tsx
flashScrollIndicators();

短暂显示滚动指示器。


recordInteraction()

tsx
recordInteraction();

通知列表已发生交互,这将触发可见性计算,例如如果 waitForInteractions 为 true 且用户尚未滚动。这通常由项上的点击或导航操作调用。


scrollToLocation()

tsx
scrollToLocation(params: SectionListScrollParams);

滚动到指定 sectionIndexitemIndex(在部分内)的项,并将其定位在可见区域,使得 viewPosition 0 将其置于顶部(可能被粘性头部覆盖),1 置于底部,0.5 居中。

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

参数:

名称类型
params
必需
object

有效的 params 键包括:

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

类型定义

Section

标识要渲染给定部分的数据的对象。

类型
any

属性:

名称类型描述
data
必需
array用于渲染此部分中项的数据。对象数组,类似于 FlatList 的 data 属性
keystring可选的 key,用于跟踪部分的重新排序。如果您不打算重新排序部分,默认将使用数组索引。
renderItemfunction可选地为此部分定义任意项渲染器,覆盖列表默认的 renderItem
ItemSeparatorComponentcomponent, element可选地为此部分定义任意项分隔符,覆盖列表默认的 ItemSeparatorComponent
keyExtractorfunction可选地为此部分定义任意 key 提取器,覆盖列表默认的 keyExtractor