VirtualizedList¶
Базовая реализация для более удобных компонентов <FlatList>
и <SectionList>
, которые также лучше документированы. В целом, их следует использовать только в том случае, если вам нужна большая гибкость, чем обеспечивает FlatList
, например, для использования с неизменяемыми данными вместо обычных массивов.
Виртуализация значительно улучшает потребление памяти и производительность больших списков, поддерживая конечное окно рендеринга активных элементов и заменяя все элементы за пределами окна рендеринга пустым пространством соответствующего размера. Окно адаптируется к поведению прокрутки, и элементы отображаются постепенно с низким прайсом (после любых запущенных взаимодействий), если они находятся далеко от видимой области, или с высоким прайсом в противном случае, чтобы минимизировать возможность увидеть пустое пространство.
Пример¶
Некоторые предостережения:
- Внутреннее состояние не сохраняется при прокрутке содержимого за пределы окна рендеринга. Убедитесь, что все ваши данные хранятся в данных элемента или во внешних хранилищах, таких как Flux, Redux или Relay.
- Это
PureComponent
, что означает, что он не будет перерисовываться, еслиprops
неглубоко равны. Убедитесь, что все, от чего зависит функцияrenderItem
, передается в качестве пропса (например,extraData
), который не становится===
после обновления, иначе ваш пользовательский интерфейс может не обновляться при изменениях. Это относится к пропсуdata
и состоянию родительского компонента. - Чтобы ограничить память и обеспечить плавную прокрутку, содержимое отображается асинхронно вне экрана. Это означает, что можно прокручивать страницу быстрее, чем скорость заполнения, и на мгновение увидеть пустое содержимое. Это компромисс, который может быть скорректирован в соответствии с потребностями каждого приложения, и мы работаем над его улучшением за кулисами.
- По умолчанию список ищет свойство
key
у каждого элемента и использует его для ключа React. В качестве альтернативы вы можете предоставить собственный пропсkeyExtractor
.
пропсы¶
ScrollView Props¶
Наследует ScrollView Props.
data¶
Непрозрачный тип данных, передаваемый в getItem
и getItemCount
для получения элементов.
Тип |
---|
любой |
getItem¶
Обязательно.
1 |
|
Общий аксессор для извлечения элемента из любого вида сгустка данных.
Тип |
---|
функция |
getItemCount¶
Обязательно.
1 |
|
Определяет, сколько элементов находится в блоке данных.
Тип |
---|
функция |
renderItem¶
Обязательно.
1 |
|
Берет элемент из data
и отображает его в списке
Тип |
---|
функция |
CellRendererComponent¶
CellRendererComponent
позволяет настроить, как ячейки, отображаемые renderItem
/ListItemComponent
, будут обернуты при помещении в основной ScrollView
. Этот компонент должен принимать обработчики событий, которые уведомляют VirtualizedList
об изменениях в ячейке.
Тип |
---|
React.ComponentType<CellRendererProps> |
ItemSeparatorComponent¶
Рендерится между каждым элементом, но не сверху или снизу. По умолчанию предоставляются пропсы highlighted
и leadingItem
. renderItem
предоставляет separators.highlight
/unhighlight
, которые обновляют пропс highlighted
, но вы также можете добавить пользовательские пропсы с помощью separators.updateProps
. Может быть компонентом React (например, SomeComponent
) или элементом React (например, <SomeComponent />
).
Тип |
---|
компонент, функция, элемент |
ListEmptyComponent¶
Отображается, когда список пуст. Может быть React компонентом (например, SomeComponent
) или React элементом (например, <SomeComponent />
).
Тип |
---|
компонент, элемент |
ListItemComponent¶
Каждый элемент данных отображается с помощью этого элемента. Это может быть класс React Component или функция рендеринга.
Тип |
---|
компонент, функция |
ListFooterComponent¶
Отображается в нижней части всех элементов. Может быть React компонентом (например, SomeComponent
) или React элементом (например, <SomeComponent />
).
Тип |
---|
компонент, элемент |
ListFooterComponentStyle¶
Стилизация для внутреннего представления для ListFooterComponent
.
Type | Required |
---|---|
ViewStyleProp | Нет |
ListHeaderComponent¶
Отображается в верхней части всех элементов. Может быть компонентом React (например, SomeComponent
) или элементом React (например, <SomeComponent />
).
Тип |
---|
компонент, элемент |
ListHeaderComponentStyle¶
Стилизация для внутреннего представления для ListHeaderComponent
.
Type |
---|
Стиль представления |
debug¶
debug
включит дополнительное протоколирование и визуальные наложения для помощи в отладке использования и реализации, но со значительным снижением производительности.
Тип |
---|
boolean |
disableVirtualization¶
Устарело
Виртуализация обеспечивает значительную оптимизацию производительности и памяти, но полностью размонтирует экземпляры реактора, находящиеся за пределами окна рендеринга. Вы должны отключать ее только в целях отладки.
Тип |
---|
boolean |
extraData¶
Свойство-маркер для указания списку на повторный рендеринг (поскольку он реализует PureComponent
). Если какая-либо из ваших функций renderItem
, Header
, Footer
и т.д. зависит от чего-либо вне свойства data
, поместите его сюда и обращайтесь с ним неизменно.
Type |
---|
любой |
getItemLayout¶
1 2 3 4 |
|
Тип |
---|
функция |
horizontal¶
Если true
, элементы отображаются рядом друг с другом горизонтально, а не вертикально.
Тип |
---|
boolean |
initialNumToRender¶
Сколько элементов нужно отобразить в начальной партии. Этого должно быть достаточно, чтобы заполнить экран, но не больше. Обратите внимание, что эти элементы никогда не будут размонтированы как часть оконного рендеринга, чтобы улучшить воспринимаемую производительность действий прокрутки к вершине.
Тип | По умолчанию |
---|---|
Число | 10 |
initialScrollIndex¶
Вместо того чтобы начинать сверху с первого элемента, начните с initialScrollIndex
. Это отключает оптимизацию "прокрутки к вершине", которая сохраняет первые элементы initialNumToRender
всегда отрисованными и сразу отрисовывает элементы, начинающиеся с этого начального индекса. Требует реализации getItemLayout
.
Тип |
---|
число |
inverted¶
Изменяет направление прокрутки. Использует масштабные преобразования -1
.
Тип |
---|
boolean |
listKey¶
Уникальный идентификатор для данного списка. Если существует несколько VirtualizedList
на одном уровне вложенности внутри другого VirtualizedList
, этот ключ необходим для правильной работы виртуализации.
Type | Required |
---|---|
строка | True |
keyExtractor¶
1 |
|
Используется для извлечения уникального ключа для данного элемента по указанному индексу. Ключ используется для кэширования и в качестве ключа react для отслеживания переупорядочивания элементов. По умолчанию экстрактор проверяет item.key
, затем item.id
, а затем возвращается к использованию индекса, как это делает React.
Тип |
---|
функция |
maxToRenderPerBatch¶
Максимальное количество элементов для рендеринга в каждом инкрементальном пакете рендеринга. Чем больше элементов отрисовывается одновременно, тем лучше скорость заполнения, но отзывчивость может пострадать, поскольку отрисовка содержимого может мешать реагированию на нажатия кнопок или другие взаимодействия.
Тип |
---|
число |
onEndReached¶
Вызывается один раз, когда позиция прокрутки оказывается в пределах onEndReachedThreshold
от логического конца списка.
Type |
---|
(info: {distanceFromEnd: число}) => void |
onEndReachedThreshold¶
На каком расстоянии от конца (в единицах видимой длины списка) должен находиться край списка от конца содержимого, чтобы сработал обратный вызов onEndReached
. Таким образом, значение 0.5
вызовет onEndReached
, когда конец содержимого будет находиться в пределах половины видимой длины списка.
Тип | По умолчанию |
---|---|
Число | 2 |
onRefresh¶
1 |
|
Если он указан, будет добавлен стандартный RefreshControl
для функциональности "Pull to Refresh". Убедитесь, что вы также правильно установили параметр refreshing
.
Тип |
---|
функция |
onScrollToIndexFailed¶
1 2 3 4 5 |
|
Используется для обработки сбоев при прокрутке до индекса, который еще не был измерен. Рекомендуется либо вычислить собственное смещение и scrollTo
его, либо прокрутить как можно дальше, а затем повторить попытку после того, как будет отображено больше элементов.
Тип |
---|
функция |
onStartReached¶
Вызывается один раз, когда позиция прокрутки оказывается в пределах onStartReachedThreshold
от логического начала списка.
Type |
---|
(info: {distanceFromStart: число}) => void |
onStartReachedThreshold¶
На каком расстоянии от начала (в единицах видимой длины списка) должен находиться передний край списка от начала содержимого, чтобы сработал обратный вызов onStartReached
. Таким образом, значение 0.5
будет вызывать onStartReached
, когда начало содержимого находится в пределах половины видимой длины списка.
Тип | По умолчанию |
---|---|
Число | 2 |
onViewableItemsChanged¶
Вызывается, когда изменяется просматриваемость строк, как определено параметром viewabilityConfig
.
Type |
---|
(обратный вызов: {changed: array of ViewTokens, viewableItems: array of ViewTokens}) => void |
persistentScrollbar¶
Type |
---|
bool |
progressViewOffset¶
Установите это значение, если необходимо смещение для правильного отображения индикатора загрузки.
Тип |
---|
число |
refreshControl¶
Пользовательский элемент управления обновлением. Когда он установлен, он заменяет компонент по умолчанию <RefreshControl>
, созданный внутри. пропсы onRefresh
и refreshing
также игнорируются. Работает только для вертикального VirtualizedList
.
Тип |
---|
элемент |
refreshing¶
Установите значение true
в ожидании новых данных от обновления.
Тип |
---|
boolean |
removeClippedSubviews¶
Это может улучшить производительность прокрутки для больших списков.
Примечание
В некоторых случаях может иметь ошибки (отсутствие содержимого) - используйте на свой страх и риск.
Тип |
---|
boolean |
renderScrollComponent¶
1 |
|
Отображение пользовательского компонента прокрутки, например, с по-другому оформленным RefreshControl
.
Тип |
---|
функция |
viewabilityConfig¶
Смотрите ViewabilityHelper.js
для типа потока и дальнейшей документации.
Type |
---|
ViewabilityConfig |
viewabilityConfigCallbackPairs¶
Список пар ViewabilityConfig
/onViewableItemsChanged
. Конкретный onViewableItemsChanged
будет вызван при выполнении условий соответствующего ViewabilityConfig
. Смотрите ViewabilityHelper.js
для типа потока и дальнейшей документации.
Тип |
---|
Массив ViewabilityConfigCallbackPair |
updateCellsBatchingPeriod¶
Количество времени между партиями рендеринга элементов с низким приоритетом, например, для рендеринга элементов, расположенных далеко от экрана. Аналогичный компромисс между скоростью заполнения и отзывчивостью, как и maxToRenderPerBatch
.
Тип |
---|
число |
windowSize¶
Определяет максимальное количество элементов, отображаемых за пределами видимой области, в единицах видимой длины. Так, если ваш список заполняет весь экран, то windowSize={21}
(по умолчанию) будет отображаться видимая область экрана плюс до 10
экранов выше и 10
ниже области просмотра. Уменьшение этого числа уменьшит потребление памяти и может улучшить производительность, но увеличит вероятность того, что при быстрой прокрутке могут появиться мгновенные пустые области не отрендеренного содержимого.
Тип |
---|
число |
Методы¶
flashScrollIndicators()¶
1 |
|
getScrollableNode()¶
1 |
|
getScrollRef()¶
1 2 3 4 |
|
getScrollResponder()¶
1 |
|
Предоставляет обращение к базовому ответчику прокрутки. Обратите внимание, что this._scrollRef
может не быть ScrollView
, поэтому нам нужно проверить, что он отвечает на getScrollResponder
перед вызовом.
scrollToEnd()¶
1 |
|
Прокручивает содержимое до конца. Может быть неаккуратным без пропса getItemLayout
.
Параметры:
Имя | Тип |
---|---|
params | object |
Допустимыми ключами params
являются:
'animated'
(boolean) - Должен ли список делать анимацию при прокрутке. По умолчаниюtrue
.
scrollToIndex()¶
1 2 3 4 5 6 |
|
Valid params
consist of:
- 'index' (number). Required.
- 'animated' (boolean). Optional.
- 'viewOffset' (number). Optional.
- 'viewPosition' (number). Optional.
scrollToItem()¶
1 2 3 4 5 6 |
|
Допустимые params
состоят из:
- 'item' (элемент). Требуется.
- 'animated' (булево). Необязательно.
- 'viewOffset' (число). Необязательно.
- 'viewPosition' (число). Необязательно.
scrollToOffset()¶
1 2 3 4 |
|
Прокрутка до определенного смещения пикселя содержимого в списке.
Параметр offset
указывает на смещение, до которого нужно прокрутить список. В случае, если horizontal
равен true
, смещением будет значение x
, в любом другом случае смещением будет значение y
.
Параметр animated
(по умолчанию true
) определяет, будет ли список делать анимацию при прокрутке.