SectionList¶
Производительный интерфейс для рендеринга секционированных списков, поддерживающий наиболее удобные функции:
- Полностью кроссплатформенный.
- Настраиваемые обратные вызовы для просмотра.
- Поддержка заголовка списка.
- Поддержка нижнего колонтитула списка.
- Поддержка разделителя элементов.
- Поддержка заголовков разделов.
- Поддержка разделителя разделов.
- Поддержка гетерогенных данных и рендеринга элементов.
- Потяните, чтобы обновить.
- Загрузка прокрутки.
Если вам не нужна поддержка секций и вы хотите более простой интерфейс, используйте <FlatList>.
Пример¶
Это удобная обертка вокруг <VirtualizedList>, и поэтому наследует его пропсы (а также пропсы <ScrollView>), которые не перечислены здесь явно, со следующими оговорками:
- Внутреннее состояние не сохраняется при прокрутке содержимого за пределы окна рендеринга. Убедитесь, что все ваши данные хранятся в данных элемента или во внешних хранилищах, таких как Flux, Redux или Relay.
- Это
PureComponent, что означает, что он не будет перерисовываться, еслиpropsостаются неглубоко равными. Убедитесь, что все, от чего зависит функцияrenderItem, передается в качестве пропса (например,extraData), который не становится===после обновления, иначе ваш пользовательский интерфейс может не обновляться при изменениях. Это относится к пропсуdataи состоянию родительского компонента. - Чтобы ограничить память и обеспечить плавную прокрутку, содержимое отображается асинхронно вне экрана. Это означает, что можно прокручивать страницу быстрее, чем скорость заполнения, и на мгновение увидеть пустое содержимое. Это компромисс, который может быть скорректирован в соответствии с потребностями каждого приложения, и мы работаем над его улучшением за кулисами.
- По умолчанию список ищет свойство
keyу каждого элемента и использует его для ключа React. В качестве альтернативы вы можете предоставить собственный пропсkeyExtractor.
пропсы¶
VirtualizedList Props¶
Наследует VirtualizedList Props.
renderItem (обязательный)¶
Рендеринг по умолчанию для каждого элемента в каждом разделе. Может быть переопределен для каждого раздела. Должен возвращать элемент React.
| Type |
|---|
| function |
Функции рендеринга будет передан объект со следующими ключами:
'item'(объект) — объект элемента, указанный в ключеdataэтого раздела.'index'(число) — индекс элемента в разделе.'section'(объект) — Полный объект раздела, как указано вsections.'separators'(объект) — Объект со следующими ключами:'highlight'(function) —() => void.'unhighlight'(function) —() => void.'updateProps'(function) —(select, newProps) => void.'select'(перечисление) — возможные значения:'leading','trailing''newProps'(объект)
sections (обязательно)¶
Фактические данные для рендеринга, аналогично пропсу data в FlatList.
| Type |
|---|
| array of Sections |
extraData¶
Свойство-маркер для указания списку на повторный рендеринг (поскольку он реализует PureComponent). Если какая-либо из ваших функций renderItem, Header, Footer и т. д. зависит от чего-либо вне свойства data, поместите его сюда и обращайтесь с ним неизменно.
| Type |
|---|
| any |
initialNumToRender¶
Сколько элементов нужно отобразить в начальной партии. Этого должно быть достаточно, чтобы заполнить экран, но не больше. Обратите внимание, что эти элементы никогда не будут размонтированы как часть оконного рендеринга, чтобы улучшить восприятие действий прокрутки к вершине.
| Type | Default |
|---|---|
| number | 10 |
inverted¶
Изменяет направление прокрутки. Использует масштабные преобразования, равные -1.
| Type | Default |
|---|---|
| boolean | false |
ItemSeparatorComponent¶
Отображается между каждым элементом, но не сверху или снизу. По умолчанию предоставляются пропсы highlighted, section и [leading/trailing][Item/Section]. renderItem предоставляет separators.highlight/unhighlight, которые обновляют пропс highlighted, но вы также можете добавить пользовательские пропсы с помощью separators.updateProps. Может быть React Component (например, SomeComponent) или React элемент (например, <SomeComponent />).
| Type |
|---|
| component, function, element |
keyExtractor¶
Используется для извлечения уникального ключа для данного элемента по указанному индексу. Ключ используется для кэширования и как ключ React для отслеживания переупорядочивания элементов. Экстрактор по умолчанию проверяет item.key, затем возвращается к использованию индекса, как это делает React. Обратите внимание, что при этом задаются ключи для каждого элемента, но для каждой общей секции все равно нужен свой ключ.
| Type |
|---|
| (item: object, index: number) => string |
ListEmptyComponent¶
Отображается, когда список пуст. Может быть компонентом React (например, SomeComponent) или элементом React (например, <SomeComponent />).
| Type |
|---|
| component, element |
ListFooterComponent¶
Отображается в самом конце списка. Может быть компонентом React (например, SomeComponent) или элементом React (например, <SomeComponent />).
| Type |
|---|
| component, element |
ListHeaderComponent¶
Отображается в самом начале списка. Может быть компонентом React (например, SomeComponent) или элементом React (например, <SomeComponent />).
| Type |
|---|
| component, element |
onEndReached¶
Вызывается один раз, когда позиция прокрутки оказывается в пределах onEndReachedThreshold от отображаемого содержимого.
| Type |
|---|
| (info: {distanceFromEnd: number}) => void |
onEndReachedThreshold¶
На каком расстоянии от конца (в единицах видимой длины списка) должен находиться нижний край списка от конца содержимого, чтобы сработал обратный вызов onEndReached. Таким образом, значение 0.5 будет вызывать onEndReached, когда конец содержимого находится в пределах половины видимой длины списка.
| Type | Default |
|---|---|
| number | 2 |
onRefresh¶
Если указано, будет добавлен стандартный RefreshControl для функциональности "Pull to Refresh". Убедитесь, что вы также правильно установили параметр refreshing. Чтобы сместить RefreshControl от вершины (например, на 100 пт), используйте progressViewOffset={100}.
| Type |
|---|
| function |
onViewableItemsChanged¶
Вызывается, когда изменяется просматриваемость строк, как определено параметром viewabilityConfig.
| Type |
|---|
| (callback: {changed: array of ViewTokens, viewableItems: array of ViewTokens}) => void |
refreshing¶
Установите значение true в ожидании новых данных от обновления.
| Type | Default |
|---|---|
| boolean | false |
removeClippedSubviews¶
Примечание
при некоторых обстоятельствах может иметь ошибки (отсутствующее содержимое) — используйте на свой страх и риск.
Это может улучшить производительность прокрутки для больших списков.
| Type | Default |
|---|---|
| boolean | false |
renderSectionFooter¶
Отображается в нижней части каждого раздела.
| Type |
|---|
(info: {section: Section}) => element, null |
renderSectionHeader¶
Рендерится в верхней части каждого раздела. По умолчанию на iOS они приклеиваются к верхней части ScrollView. См. stickySectionHeadersEnabled.
| Type |
|---|
(info: {section: Section}) => element, null |
SectionSeparatorComponent¶
Отображаются сверху и снизу каждого раздела (обратите внимание, что это отличается от ItemSeparatorComponent, который отображается только между элементами). Они предназначены для отделения разделов от заголовков выше и ниже и обычно имеют такой же отклик подсветки, как и ItemSeparatorComponent. Также получает highlighted, [leading/trailing][Item/Section], и любые пользовательские пропсы из separators.updateProps.
| Type |
|---|
| component, element |
stickySectionHeadersEnabled¶
Заставляет заголовки разделов прилипать к верхней части экрана, пока следующий за ним заголовок не сдвинет его. Включено по умолчанию только на iOS, поскольку это стандарт платформы.
| Type | Default |
|---|---|
| boolean | false true |
Методы¶
flashScrollIndicators() ¶
1 | |
Кратковременно отображает индикаторы прокрутки.
recordInteraction()¶
1 | |
Сообщает списку, что произошло взаимодействие, которое должно вызвать расчеты просматриваемости, например, если waitForInteractions истинно и пользователь не прокрутил страницу. Обычно это вызывается при касании элементов или при навигационных действиях.
scrollToLocation()¶
1 | |
Прокручивается до элемента с указанными sectionIndex и itemIndex (в пределах раздела), расположенного в области просмотра так, что viewPosition 0 размещает его вверху (и может быть закрыт липким заголовком), 1 — внизу, а 0.5 — посередине.
Примечание
Прокрутка в места за пределами окна рендеринга невозможна без указания пропса getItemLayout или onScrollToIndexFailed.
Параметры:
| Name | Type |
|---|---|
| params (Required) | object |
Допустимыми ключами params являются:
'animated'(boolean) — Должен ли список делать анимацию при прокрутке. По умолчаниюtrue.'itemIndex'(число) — индекс в разделе для элемента, к которому будет осуществляться прокрутка. Требуется.'sectionIndex'(число) — индекс раздела, содержащего элемент для прокрутки. Требуется.'viewOffset'(число) — фиксированное число пикселей для смещения конечной позиции цели, например, для компенсации прилипающих заголовков.'viewPosition'(число) — При значении0элемент, указанный индексом, располагается сверху,1— снизу, а0.5— по центру.
Определения типа¶
Section¶
Объект, определяющий данные, которые должны быть отображены для данного раздела.
| Type |
|---|
| any |
Свойства:
| Name | Type | Description |
|---|---|---|
| data (Required) | array | The data for rendering items in this section. Array of objects, much like FlatList's data prop. |
| key | string | Optional key to keep track of section re-ordering. If you don't plan on re-ordering sections, the array index will be used by default. |
| renderItem | function | Optionally define an arbitrary item renderer for this section, overriding the default renderItem for the list. |
| ItemSeparatorComponent | component, element | Optionally define an arbitrary item separator for this section, overriding the default ItemSeparatorComponent for the list. |
| keyExtractor | function | Optionally define an arbitrary key extractor for this section, overriding the default keyExtractor. |