СписокРазделов
Высокопроизводительный интерфейс для отображения разделенных списков, поддерживающий самые удобные функции:
- Полностью кроссплатформенный.
- Настраиваемые колбэки видимости.
- Поддержка заголовков списка.
- Поддержка подвалов списка.
- Поддержка разделителей элементов.
- Поддержка заголовков разделов.
- Поддержка разделителей разделов.
- Поддержка разнородных данных и элементов отображения.
- Перетаскивание для обновления.
- Загрузка при прокрутке.
Если вам не нужна поддержка разделов и вы хотите более простой интерфейс, используйте <FlatList>.
- Компонент функции
- Компонент класса
Это удобная обертка вокруг <VirtualizedList>, и поэтому она наследует её свойства (а также свойства <ScrollView>), которые не указаны здесь явно, а также следующие замечания:
- Внутреннее состояние не сохраняется, когда содержимое прокручивается за пределы окна рендеринга. Убедитесь, что все ваши данные захватываются в данных элементов или внешних хранилищах, таких как Flux, Redux или Relay.
- Это
PureComponent, что означает, что он не будет перерисовываться, еслиpropsостаются одинаковыми. Убедитесь, что всё, от чего зависит ваша функцияrenderItem, передаётся как свойство (например,extraData), которое не===после обновлений, иначе ваш интерфейс может не обновиться при изменениях. Это включает в себя свойство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' (объект)
- 'highlight' (функция) -
Обязательное
sections
Фактические данные для отображения, подобно свойству data в FlatList.
| Тип |
|---|
| массив Разделов |
extraData
Свойство-маркер для указания списку перерендеринга (поскольку он реализует PureComponent). Если какие-либо ваши функции renderItem, Заголовок, Подвал и т. д. зависят от чего-либо вне свойства data, поместите это сюда и обрабатывайте неизменяемым.
| Тип |
|---|
| любой |
initialNumToRender
Количество элементов, которые нужно отобразить в начальной группе. Этого должно быть достаточно для заполнения экрана, но не намного больше. Обратите внимание, что эти элементы никогда не будут удалены в рамках оконного рендеринга для повышения производительности при действиях прокрутки до верха.
| Тип | Значение по умолчанию |
|---|---|
| число | 10 |
inverted
Инвертирует направление прокрутки. Использует преобразования масштаба -1.
| Тип | Значение по умолчанию |
|---|---|
| логическое значение | false |
ItemSeparatorComponent
Отображается между каждым элементом, но не вверху и внизу. По умолчанию предоставляются свойства highlighted, section, и [leading/trailing][Item/Section]. renderItem предоставляет separators.highlight/unhighlight, которые обновят свойство highlighted, но вы также можете добавить пользовательские свойства с помощью separators.updateProps.
| Тип |
|---|
| компонент, элемент |
keyExtractor
Используется для извлечения уникального ключа для заданного элемента в указанном индексе. Ключ используется для кэширования и как ключ React для отслеживания переупорядочивания элементов. По умолчанию извлечение проверяет item.key, а затем использует индекс как резервный вариант, как и React. Обратите внимание, что это устанавливает ключи для каждого элемента, но каждый раздел в целом всё ещё нуждается в своём собственном ключе.
| Тип |
|---|
| (элемент: объект, индекс: число) => строка |
ListEmptyComponent
Отображается, когда список пуст. Может быть компонентом React (например, SomeComponent или React-элементом (например, <SomeComponent />).
| Тип |
|---|
| компонент, элемент |
ListFooterComponent
Отображается в самом конце списка. Может быть компонентом React (например, SomeComponent или React-элементом (например, <SomeComponent />).
| Тип |
|---|
| компонент, элемент |
ListHeaderComponent
Отображается в самом начале списка. Может быть компонентом React (например, SomeComponent или React-элементом (например, <SomeComponent />).
| Тип |
|---|
| компонент, элемент |
onEndReached
Вызывается один раз, когда положение прокрутки находится в пределах onEndReachedThreshold от отображаемого содержимого.
| Тип |
|---|
| (информация: { distanceFromEnd: число }) => void |
onEndReachedThreshold
Насколько далеко от конца (в единицах видимой длины списка) нижний край списка должен быть от конца содержимого для активации колбэка onEndReached. Таким образом, значение 0,5 активирует onEndReached когда конец содержимого находится в пределах половины видимой длины списка.
| Тип | Значение по умолчанию |
|---|---|
| число | 2 |
onRefresh
Если указано, будет добавлен стандартный RefreshControl для функциональности "Перетащить для обновления". Убедитесь, что также правильно задано свойство refreshing. Для смещения RefreshControl от верха (например, на 100 точек), используйте progressViewOffset={100}.
| Тип |
|---|
| функция |
onViewableItemsChanged
Вызывается при изменении видимости строк, как определено свойством viewabilityConfig.
| Тип |
|---|
| (колбэк: { changed: массив ViewTokens, viewableItems: массив ViewTokens }) => void |
refreshing
Установите это значение в true, ожидая новых данных с обновления.
| Тип | Значение по умолчанию |
|---|---|
| логическое значение | false |
removeClippedSubviews
Примечание: может содержать ошибки (отсутствующее содержимое) в некоторых случаях - используйте на свой страх и риск.
Это может улучшить производительность прокрутки для больших списков.
| Тип | Значение по умолчанию |
|---|---|
| логическое значение | false |
renderSectionFooter
Отображается внизу каждого раздела.
| Тип |
|---|
(информация: { раздел: Раздел }) => элемент, null
|
renderSectionHeader
Отображается вверху каждого раздела. Они прикрепляются к верхней части ScrollView по умолчанию в iOS. См. stickySectionHeadersEnabled.
| Тип |
|---|
(информация: { раздел: Раздел }) => элемент, null
|
SectionSeparatorComponent
Отображается вверху и внизу каждого раздела (обратите внимание, что это отличается от ItemSeparatorComponent, который отображается только между элементами). Они предназначены для разделения разделов от заголовков выше и ниже и обычно имеют тот же ответ при выделении, что и ItemSeparatorComponent. Также получает highlighted, [leading/trailing][Item/Section], и любые пользовательские свойства из separators.updateProps.
| Тип |
|---|
| компонент, элемент |
stickySectionHeadersEnabled
Прикрепляет заголовки разделов к верху экрана до тех пор, пока следующий заголовок не отцепит его. По умолчанию включено только в iOS, так как это стандартной платформы.
| Тип | Значение по умолчанию |
|---|---|
| логическое значение |
false Android
true iOS
|
Методы
flashScrollIndicators() iOS
flashScrollIndicators();
Временно отображает индикаторы прокрутки.
recordInteraction()
recordInteraction();
Сообщает списку о том, что произошло взаимодействие, что должно активировать вычисления видимости, например, если waitForInteractions истинно, а пользователь не прокручивал. Обычно это вызывается при нажатии на элементы или действиях навигации.
scrollToLocation()
scrollToLocation(params);
Прокручивает элемент в указанном sectionIndex и itemIndex (внутри раздела) в области видимости так, что viewPosition 0 помещает его в верхнюю часть (и он может быть скрыт закреплённым заголовком), 1 — в нижнюю, а 0,5 — по центру.
Примечание: невозможно прокрутить к позициям за пределами области рендеринга без указания
getItemLayoutилиonScrollToIndexFailedсвойства.
Параметры:
| Имя | Тип |
|---|---|
| params Обязательно
|
объект |
Допустимые params ключи:
- 'animated' (булево) — Прокручиваться ли списку с анимацией. По умолчанию
true. - 'itemIndex' (число) — Индекс элемента в разделе, к которому нужно прокрутить. Обязательно.
- 'sectionIndex' (число) — Индекс раздела, содержащего элемент, к которому нужно прокрутить. Обязательно.
- 'viewOffset' (число) — Фиксированное количество пикселей для смещения конечной позиции, например, для компенсации закреплённых заголовков.
- 'viewPosition' (число) — Значение
0помещает элемент, определённый индексом, в верхнюю часть,1— в нижнюю, а0.5— по центру.
Определения типов
Раздел
Объект, определяющий данные, которые нужно отобразить для данного раздела.
| Тип |
|---|
| любой |
Свойства:
| Имя | Тип | Описание |
|---|---|---|
| data Обязательно
|
массив | Данные для рендеринга элементов в этом разделе. Массив объектов, очень похожий на FlatList свойство данных. |
| key | строка | Необязательный ключ для отслеживания переупорядочения разделов. Если вы не планируете переупорядочивать разделы, по умолчанию используется индекс массива. |
| renderItem | функция | Необязательно, определите произвольный рендерер элементов для этого раздела, переопределив стандартный renderItem для списка. |
| ItemSeparatorComponent | компонент, элемент | Необязательно, определите произвольный разделитель элементов для этого раздела, переопределив стандартный ItemSeparatorComponent для списка. |
| keyExtractor | функция | Необязательно, определите произвольную функцию извлечения ключей для этого раздела, переопределив стандартную keyExtractor. |
© 2022 Facebook Inc.
Licensed under the Creative Commons Attribution 4.0 International Public License.
https://reactnative.dev/docs/sectionlist