SectionList
一个用于渲染分区列表的高性能接口,支持以下最实用的功能:
- 完全跨平台。
- 可配置的可见性回调。
- 支持列表头部。
- 支持列表尾部。
- 支持项分隔符。
- 支持分区头部。
- 支持分区分隔符。
- 支持异构数据和项渲染。
- 下拉刷新。
- 滚动加载。
如果你不需要分区支持且想要更简单的接口,请使用 <FlatList>。
示例
这是 <VirtualizedList> 的便捷包装器,因此继承了其属性(以及 <ScrollView> 的属性),除非此处明确列出,并注意以下注意事项:
- 当内容滚动出渲染窗口时,内部状态不会保留。确保所有数据都捕获在项数据或外部存储(如 Flux、Redux 或 Relay)中。
- 这是一个
PureComponent,这意味着如果props保持浅相等,它将不会重新渲染。确保你的renderItem函数依赖的所有内容都作为 prop 传递(例如extraData),并且在更新后不===,否则你的 UI 可能不会随变化更新。这包括dataprop 和父组件状态。 - 为了限制内存并实现平滑滚动,内容是在屏幕外异步渲染的。这意味着滚动速度可能快于填充率,并暂时看到空白内容。这是一个可以根据每个应用的需求进行调整的权衡,我们正在幕后改进它。
- 默认情况下,列表会在每个项上查找
keyprop 并将其用作 React key。或者,你可以提供自定义的keyExtractorprop。
参考
属性
VirtualizedList 属性
必需renderItem
每个分区中每个项的默认渲染器。可以按分区覆盖。应返回一个 React 元素。
| 类型 |
|---|
| 函数 |
渲染函数将传递一个包含以下键的对象:
- 'item'(对象)- 此分区的
data键中指定的项对象 - 'index'(数字)- 项在分区内的索引。
- 'section'(对象)-
sections中指定的完整分区对象。 - 'separators'(对象)- 一个包含以下键的对象:
- 'highlight'(函数)-
() => void - 'unhighlight'(函数)-
() => void - 'updateProps'(函数)-
(select, newProps) => void- 'select'(枚举)- 可能的值为 'leading', 'trailing'
- 'newProps'(对象)
- 'highlight'(函数)-
必需sections
要渲染的实际数据,类似于 FlatList 中的 data 属性。
| 类型 |
|---|
| Section 数组 |
extraData
一个标记属性,用于告诉列表重新渲染(因为它实现了 PureComponent)。如果你的任何 renderItem、Header、Footer 等函数依赖于 data 属性之外的任何内容,请将其放在这里并将其视为不可变的。
| 类型 |
|---|
| 任意 |
initialNumToRender
初始批次中要渲染多少项。这应该足以填充屏幕,但不要太多。注意,为了提高滚动到顶部操作的感知性能,这些项作为窗口化渲染的一部分永远不会被卸载。
| 类型 | 默认 |
|---|---|
| 数字 | 10 |
inverted
反转滚动方向。使用 -1 的缩放变换。
| 类型 | 默认 |
|---|---|
| 布尔值 | false |
ItemSeparatorComponent
渲染在每项之间,但不在顶部或底部。默认情况下,提供 highlighted、section 和 [leading/trailing][Item/Section] 属性。renderItem 提供 separators.highlight/unhighlight 将更新 highlighted 属性,但你也可以使用 separators.updateProps 添加自定义属性。可以是 React 组件(例如 SomeComponent),或 React 元素(例如 <SomeComponent />)。
| 类型 |
|---|
| 组件,函数,元素 |
keyExtractor
用于提取指定索引处给定项的唯一键。键用于缓存并作为 React 键来跟踪项重新排序。默认提取器检查 item.key,然后 item.id,然后回退到使用索引,就像 React 一样。注意,这为每个项设置键,但每个整体分区仍然需要自己的键。
| 类型 |
|---|
| (item: 对象,index: 数字) => 字符串 |
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 属性定义。
refreshing
在等待刷新新数据时将其设置为 true。
| 类型 | 默认 |
|---|---|
| 布尔值 | false |
removeClippedSubviews
注意:在某些情况下可能有 bug(内容缺失)- 使用风险自负。
这可以提高大列表的滚动性能。
| 类型 | 默认 |
|---|---|
| 布尔值 | false |
renderSectionFooter
渲染在每个分区的底部。
| 类型 |
|---|
(info: {section: Section}) => 元素 | null |
renderSectionHeader
渲染在每个分区的顶部。默认情况下,这些在 iOS 上粘滞在 ScrollView 的顶部。参见 stickySectionHeadersEnabled。
| 类型 |
|---|
(info: {section: 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);
滚动到指定 sectionIndex 和 itemIndex(在分区内)的项,定位在可见区域,使得 viewPosition 0 将其 placed 在顶部(可能被粘性头部覆盖),1 在底部,0.5 在中间居中。
注意:如果不指定
getItemLayout或onScrollToIndexFailed属性,无法滚动到渲染窗口外的位置。
参数:
| 名称 | 类型 |
|---|---|
| params 必需 | 对象 |
有效的 params 键包括:
- 'animated'(布尔值)- 列表是否应在滚动时进行动画。默认为
true。 - 'itemIndex'(数字)- 分区内要滚动到的项的索引。必需。
- 'sectionIndex'(数字)- 包含要滚动到的项的分区的索引。必需。
- 'viewOffset'(数字)- 偏移最终目标位置的固定像素数,例如补偿粘性头部。
- 'viewPosition'(数字)- 值
0将索引指定的项放在顶部,1在底部,0.5在中间居中。
类型定义
Section
一个用于标识给定区段待渲染数据的对象。
| 类型 |
|---|
| any |
属性:
| 名称 | 类型 | 描述 |
|---|---|---|
| data 必需 | array | 用于渲染该区段中项的数据。对象数组,很像 FlatList 的 data 属性。 |
| key | string | 可选的 key,用于跟踪区段的重新排序。如果您不打算重新排序区段,默认将使用数组索引。 |
| renderItem | function | 可选地为该区段定义任意项渲染器,覆盖列表默认的 renderItem。 |
| ItemSeparatorComponent | component, element | 可选地为该区段定义任意项分隔符,覆盖列表默认的 ItemSeparatorComponent。 |
| keyExtractor | function | 可选地为该区段定义任意 key 提取器,覆盖默认的 keyExtractor。 |