Колекції даних

Для відображення колекції однотипних даних (на кшталт списків користувачів, новин, посилань тощо) є два підходи. Який обрати - залежить від поставленої задачі та оцінки продуктивності.

Підходи:

ScrollView + map

Як контейнер застосовують ScrollView, а всередині нього перебирають масив методом map.

App.js
import React, { useState } from "react";
import { StyleSheet, Text, ScrollView, SafeAreaView } from "react-native";

const FRIENDS = [
  {
    id: "001",
    name: "Alex",
  },
  {
    id: "002",
    name: "John",
  },
  {
    id: "003",
    name: "Mark",
  },
  {
    id: "004",
    name: "Andrew",
  },
];

export default function App() {
  const [friends, setFriends] = useState(FRIENDS);

  return (
    <SafeAreaView style={styles.container}>
      <ScrollView>
        {friends.map((friend) => (
          <Text key={friend.id} style={styles.text}>
            {friend.name}
          </Text>
        ))}
      </ScrollView>
    </SafeAreaView>
  );
}

const styles = StyleSheet.create({
  container: {
    flex: 1,
    alignItems: "center",
    justifyContent: "center",
    backgroundColor: "#ecf0f1",
  },
  text: {
    fontSize: 40,
  },
});

За таким принципом рендерять розмітку списків у веброзробці. Утім при такому способі вантажиться уся колекція одразу. Наприклад, якщо є тисяча елементів, то відображається на екрані невелика частина, а решта ховається за межами ScrollView. В такому разі контрпродуктивно вантажиться застосунок на марні задачі. Інша справа підвантажувати контент за потреби. Наступний спосіб.

FlatList

FlatList рендерить лише ту частину колекції, яку видно на екрані пристрою. Пешта контенту буде підванатжуватися, коли потрапить у вʼ.порт пристрою.

Основні пропси компоненту FlatList:

  • data - приймає масив елементів

  • renderItem - функція, яка бере послідовно по одному елемену із data та повертає відформатований компонент для візуалізації.

  • keyExtractor - сюди передають унікальний ключ елемента колекції (аналогія key в map). ключ має бути рядком.

SectionList

Якщо потрібно відобразити набір даних, розбитих на логічні розділи, в такому разі зручно використовувати компонент SectionList.

Посилання на офіційну документацію:

List Viewsarrow-up-right

FlatListarrow-up-right

SectionListarrow-up-right

Last updated