Как отображать списки
Этот пост является частью серии, в которой я описываю свой опыт изучения React Native при создании своего первого мобильного приложения. Это также мой способ отблагодарить сообщество React Native советами и идеями, которые я записываю по ходу дела.
Почти каждое приложение должно отображать список объектов. В нашем случае эти списки имеют конечное количество объектов, но во многих случаях требуется бесконечный список (например, лента для приложения социальной сети, такого как Instagram). Давайте попробуем научиться отображать списки в React Native с новым компонентом FlatList
.
Самый простой способ использования FlatList
Два основных реквизита, которые вам нужно передать FlatList, — это массив данных и функция, которая возвращает компонент из каждого элемента данных.
Очистка некоторых предупреждений
Если вы заметили, даже если приведенный выше код работает, он выдает нам предупреждение о том, что в VirtualizedList
(на самом деле это то, на чем построен FlatList
) отсутствуют ключи для элементов.
Если вы визуализировали массив компонентов в React, вы, вероятно, видели такое предупреждение раньше. VirtualizedList требует уникальный ключ для каждого компонента, который используется для кэширования и других соображений эффективности. Один из способов сделать это — иметь реквизит key
в каждом элементе и использовать его. Если массив данных не содержит элементов с ключевым свойством, мы можем предоставить функцию, которая генерирует уникальный ключ для каждого элемента, как показано ниже. Это должно позаботиться о предупреждениях.
Функция обновления по запросу
Очень распространенная функция списков в мобильных приложениях — «обновить по нажатию». Обычно это сигнализирует приложению получить новые данные с сервера и повторно отобразить список объектов. На самом деле это довольно легко сделать с помощью FlatList.
Что нам нужно добавить, так это обратный вызов, который вызывается, когда пользователь выполняет жест «потяните для обновления» (onRefresh
), и флаг, сообщающий FlatList о том, что обновление выполняется (refreshing
). Приведенный выше код — простая игрушка, но вы можете себе представить, что обработчик onRefresh
получает какие-то данные по сети, что может занять некоторое время.
Бонусные баллы: бесконечная прокрутка
Приложение, которое мы создаем, не требует бесконечной функциональности прокрутки, но я мог бы рассказать об этом здесь, так как я немного поигрался с этим.
Чтобы заставить это работать, вам нужно реализовать обработчик для onEndReached
prop. Логика в этом обработчике зависит от вас, но две основные вещи заключаются в том, что (а) как следует из названия, это срабатывает, когда пользователь прокручивает список до конца, и (б) вы, скорее всего, захотите обновите массив элементов, которые вы загружаете в реквизит data
в обработчике. Для целей этой простой демонстрации предположим, что при каждом вызове мы добавляем еще 10 элементов в массив данных.
Вам также нужно будет передать значение реквизита onEndReachedThreshold
. Согласно документации, это устанавливает порог в пикселях (виртуальный, а не физический) для вызова метода onEndReached
. Вы можете поиграть с этим, но нулевое значение — хорошая отправная точка.
В приведенном ниже примере в качестве реквизита входных данных используется массив восходящих целых чисел и отображается простое ортогональное представление. Когда мы достигнем конца списка, обработчик onEndReached
добавит еще немного данных в конец массива, так что мы идем от [0,..,9] => [0,..,9,10,.. ,19] и так далее.
Вы заметите, что мы также используем часть состояния page
каждый раз, когда мы вызываем moreData
. Хотя здесь это не очень полезно, вы можете себе представить, что в реальном сценарии, когда moreData
будет вызывать API для получения данных с разбивкой на страницы, нам нужно будет отслеживать, где мы находимся и какие данные мы запрашиваем дальше.
Итак, мы здесь! Мы освоили отображение простых списков (возможно, бесконечных) элементов в React Native. Довольно аккуратно, если я сам так говорю. Далее: настройка экранов регистрации и входа в систему, их подключение к AWS Cognito. Вещи становятся реальными!
Если вам понравилась эта статья, не стесняйтесь нажать кнопку хлопка 👏, чтобы помочь другим найти ее.
Обо мне
Я Алекс, инженер-программист и фанат стартапов. В настоящее время я являюсь соучредителем стартапа AgentRisk, где я являюсь вице-президентом по продукту и разработке. В прошлой жизни я был частью команды инженеров-основателей в стартапе корпоративных облачных хранилищ в Силиконовой долине, делал кучу крутых передовых проектов в Cisco Research и работал над действительно инновационной сетью центров обработки данных. архитектуры» во время учебы в магистратуре Калифорнийского университета в Сан-Франциско. Мне всегда нравится изучать новые технологии и постоянно заниматься поставками сторонних проектов.