SectionList
用于渲染分段列表的高性能接口,支持最便捷的功能
- 完全跨平台。
- 可配置的可见性回调。
- 列表头部支持。
- 列表尾部支持。
- 项目分隔符支持。
- 分段头部支持。
- 分段分隔符支持。
- 异构数据和项目渲染支持。
- 下拉刷新。
- 滚动加载。
如果您不需要分段支持并希望有一个更简单的接口,请使用 <FlatList>
。
示例
这是 <VirtualizedList>
的一个便捷包装器,因此继承了其 props(以及 <ScrollView>
的 props),这里没有明确列出,并附带以下注意事项:
- 当内容滚动出渲染窗口时,内部状态不会被保留。请确保所有数据都捕获在项目数据或外部存储中,例如 Flux、Redux 或 Relay。
- 这是一个 `PureComponent`,这意味着如果 `props` 保持浅相等,它将不会重新渲染。请确保您的 `renderItem` 函数所依赖的所有内容都作为 prop 传递(例如 `extraData`),并且在更新后不是 `===`,否则您的 UI 可能不会随着更改而更新。这包括 `data` prop 和父组件状态。
- 为了限制内存并实现平滑滚动,内容会在屏幕外异步渲染。这意味着滚动速度可能快于填充速度,并可能暂时看到空白内容。这是一个可以根据每个应用程序的需求进行调整的权衡,我们正在努力在幕后改进它。
- 默认情况下,列表会在每个项目上查找 `key` 属性并将其用作 React 键。或者,您可以提供一个自定义的 `keyExtractor` 属性。
参考
属性
VirtualizedList 属性
必需`renderItem`
每个分段中每个项目的默认渲染器。可以按分段覆盖。应返回一个 React 元素。
类型 |
---|
函数 |
渲染函数将传递一个包含以下键的对象:
- 'item' (object) - 此分段的 `data` 键中指定的项目对象
- 'index' (number) - 项目在分段中的索引。
- 'section' (object) - `sections` 中指定的完整分段对象。
- 'separators' (object) - 一个包含以下键的对象:
- 'highlight' (function) - `() => void`
- 'unhighlight' (function) - `() => void`
- 'updateProps' (function) - `(select, newProps) => void`
- 'select' (enum) - 可能的值为 'leading'、'trailing'
- 'newProps' (object)
必需`sections`
实际要渲染的数据,类似于 `FlatList` 中的 `data` 属性。
类型 |
---|
Sections 数组 |
extraData
一个标记属性,用于告诉列表重新渲染(因为它实现了 `PureComponent`)。如果您的 `renderItem`、Header、Footer 等函数依赖于 `data` 属性之外的任何内容,请将其放在这里并将其视为不可变的。
类型 |
---|
任何 |
initialNumToRender
首次渲染的项数。这应该足以填满屏幕,但不要太多。请注意,为了提高滚动到顶部操作的感知性能,这些项永远不会作为窗口渲染的一部分被卸载。
类型 | 默认 |
---|---|
数字 | 10 |
inverted
反转滚动方向。使用 -1 的缩放变换。
类型 | 默认 |
---|---|
布尔值 | 假 |
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: 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。
类型 | 默认 |
---|---|
布尔值 | 假 |
removeClippedSubviews
注意:在某些情况下可能存在错误(内容缺失)——请自行承担风险。
这可能会改善大型列表的滚动性能。
类型 | 默认 |
---|---|
布尔值 | 假 |
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 上启用,因为那是那里的平台标准。
类型 | 默认 |
---|---|
布尔值 | 假 安卓 真 iOS |
方法
flashScrollIndicators()
iOS
flashScrollIndicators();
短暂显示滚动指示器。
recordInteraction()
recordInteraction();
通知列表已发生交互,这应触发可见性计算,例如,如果 `waitForInteractions` 为 true 且用户未滚动。这通常由项目上的点击或导航操作调用。
scrollToLocation()
scrollToLocation(params: SectionListScrollParams);
滚动到指定 `sectionIndex` 和 `itemIndex`(在节内)的项目,该项目位于可见区域中,`viewPosition` 为 0 时将其置于顶部(可能会被粘性标题覆盖),为 1 时置于底部,为 0.5 时居中。
注意:如果没有指定 `getItemLayout` 或 `onScrollToIndexFailed` 属性,则无法滚动到渲染窗口之外的位置。
参数
姓名 | 类型 |
---|---|
参数 必需 | 对象 |
有效的 `params` 键是
- 'animated' (boolean) - 列表滚动时是否应执行动画。默认为 `true`。
- 'itemIndex' (number) - 要滚动到的项目在节内的索引。必填。
- 'sectionIndex' (number) - 包含要滚动到的项目的节的索引。必填。
- 'viewOffset' (number) - 固定像素数量以偏移最终目标位置,例如,用于补偿粘性标题。
- 'viewPosition' (number) - 值为 `0` 时将索引指定的项目放在顶部,`1` 放在底部,`0.5` 居中。
类型定义
Section
一个用于识别给定部分要渲染的数据的对象。
类型 |
---|
任何 |
属性
姓名 | 类型 | 描述 |
---|---|---|
数据 必需 | 数组 | 用于渲染此部分中项目的数据。对象数组,非常类似于 `FlatList` 的 data 属性。 |
键 | 字符串 | 可选键,用于跟踪部分的重新排序。如果您不打算重新排序部分,默认将使用数组索引。 |
renderItem | 函数 | 可选地为此部分定义任意项目渲染器,覆盖列表的默认 `renderItem`。 |
ItemSeparatorComponent | 组件,元素 | 可选地为此部分定义任意项目分隔符,覆盖列表的默认 `ItemSeparatorComponent`。 |
keyExtractor | 函数 | 可选地为此部分定义任意键提取器,覆盖默认的 `keyExtractor`。 |