跳至主要内容

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 属性。

类型
分段 数组

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,然后回退到使用索引,就像 React 所做的那样。请注意,这会为每个项目设置键,但每个整体分段仍然需要自己的键。

类型
(item: 对象, index: 数字) => 字符串

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: 分段}) => 元素|null

renderSectionHeader

渲染在每个分段的顶部。默认情况下,这些在 iOS 上粘贴到 ScrollView 的顶部。请参阅 stickySectionHeadersEnabled

类型
(info: {section: 分段}) => 元素|null

SectionSeparatorComponent

渲染在每个分段的顶部和底部(请注意,这与 ItemSeparatorComponent 不同,后者仅渲染在项目之间)。这些旨在将分段与上下的头部分隔开,并且通常具有与 ItemSeparatorComponent 相同的高亮响应。还接收 highlighted[leading/trailing][Item/Section] 以及来自 separators.updateProps 的任何自定义属性。

类型
组件、元素

stickySectionHeadersEnabled

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

类型默认
布尔值false
Android

true
iOS

方法

flashScrollIndicators()
iOS

flashScrollIndicators();

短暂显示滚动指示器。


recordInteraction()

recordInteraction();

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


scrollToLocation()

scrollToLocation(params: SectionListScrollParams);

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

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

参数

名称类型
params
必需
对象

有效的 params 键为

  • 'animated' (布尔值) - 列表在滚动时是否应执行动画。默认为 true
  • 'itemIndex' (数字) - 要滚动到的项目的索引(在分段内)。必需。
  • 'sectionIndex' (数字) - 包含要滚动到的项目的索引(在分段内)。必需。
  • 'viewOffset' (数字) - 最终目标位置的固定像素偏移量,例如,用于补偿粘性头部。

  • 'viewPosition' (数字) - 值为 0 将索引指定的项目放置在顶部,值为 1 放置在底部,值为 0.5 放置在中间。

类型定义

Section

一个对象,用于标识要为给定 section 渲染的数据。

类型
任意

属性

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