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