[React Native] FlatList


  • this ordered seed list will be replaced by the toc

FlatList

FlatListλŠ” React Nativeμ—μ„œ λ¦¬μŠ€νŠΈλ‚˜ 슀크둀 κ°€λŠ₯ν•œ λͺ©λ‘μ„ λ Œλ”λ§ν•˜κΈ° μœ„ν•œ 핡심 μ»΄ν¬λ„ŒνŠΈ 쀑 ν•˜λ‚˜μž…λ‹ˆλ‹€. 이 μ»΄ν¬λ„ŒνŠΈλŠ” 맀우 큰 λͺ©λ‘μ΄λ‚˜ 데이터 μ„ΈνŠΈλ₯Ό μ²˜λ¦¬ν•˜λŠ” 데 맀우 효율적이며, κ°€λ‘œ 슀크둀 λ˜λŠ” κ·Έλ¦¬λ“œ λ ˆμ΄μ•„μ›ƒκ³Ό 같은 λ‹€μ–‘ν•œ 리슀트 μœ ν˜•μ„ 지원

πŸ€³πŸ»Β μ£Όμš” νŠΉμ§•:

  • 효율적인 λ Œλ”λ§: FlatListλŠ” ν•„μš”ν•œ ν•­λͺ©λ§Œ λ Œλ”λ§ν•˜μ—¬ μ„±λŠ₯을 μ΅œμ ν™”ν•©λ‹ˆλ‹€. 화면에 λ³΄μ΄λŠ” ν•­λͺ©λ§Œ λ Œλ”λ§ν•˜λ―€λ‘œ λŒ€κ·œλͺ¨ 데이터 μ„ΈνŠΈλ₯Ό μ²˜λ¦¬ν•˜λŠ” 데 μ ν•©ν•©λ‹ˆλ‹€.
  • λ‹€μ–‘ν•œ λͺ©λ‘ μœ ν˜• 지원: FlatListλŠ” 수직 λͺ©λ‘ 뿐만 μ•„λ‹ˆλΌ κ°€λ‘œ λͺ©λ‘ 및 κ·Έλ¦¬λ“œ λ ˆμ΄μ•„μ›ƒλ„ μ§€μ›ν•©λ‹ˆλ‹€. horizontal 및 numColumns 속성을 μ‚¬μš©ν•˜μ—¬ λ ˆμ΄μ•„μ›ƒμ„ λ³€κ²½ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • 각 ν•­λͺ©μ˜ μ»€μŠ€ν„°λ§ˆμ΄μ¦ˆ: renderItem 속성을 μ‚¬μš©ν•˜μ—¬ 각 ν•­λͺ©μ˜ λͺ¨μ–‘κ³Ό λ‚΄μš©μ„ μ™„μ „νžˆ μ»€μŠ€ν„°λ§ˆμ΄μ¦ˆν•  수 μžˆμŠ΅λ‹ˆλ‹€. 이것은 λ³΅μž‘ν•œ ν•­λͺ©μ„ ν‘œμ‹œν•˜λŠ” 데 맀우 μœ μš©ν•©λ‹ˆλ‹€.
  • μƒˆλ‘œκ³ μΉ¨ 및 λ¬΄ν•œ 슀크둀: FlatListλŠ” μƒˆλ‘œκ³ μΉ¨ κΈ°λŠ₯을 μ œκ³΅ν•˜κ³ , onEndReached 속성을 톡해 λ¬΄ν•œ μŠ€ν¬λ‘€μ„ κ΅¬ν˜„ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • ν•­λͺ©μ˜ 동적 크기 지원: 각 ν•­λͺ©μ΄ λ‹€λ₯Έ 크기λ₯Ό κ°€μ§ˆ 수 있으며, getItemLayout 속성을 μ‚¬μš©ν•˜μ—¬ ν•­λͺ©μ˜ 크기λ₯Ό λ™μ μœΌλ‘œ 계산할 수 μžˆμŠ΅λ‹ˆλ‹€.

πŸ€³πŸ»Β μ‚¬μš© 방법:

FlatListλ₯Ό μ‚¬μš©ν•˜κΈ° μœ„ν•΄μ„œλŠ” λ‹€μŒ 단계λ₯Ό λ”°λ¦…λ‹ˆλ‹€:

  1. FlatList μ»΄ν¬λ„ŒνŠΈλ₯Ό React Native μ•±μ˜ JSX 내에 μΆ”κ°€ν•©λ‹ˆλ‹€.
  2. data 속성에 ν‘œμ‹œν•  데이터 배열을 μ œκ³΅ν•©λ‹ˆλ‹€.
  3. renderItem 속성을 μ‚¬μš©ν•˜μ—¬ 각 ν•­λͺ©μ„ λ Œλ”λ§ν•˜λŠ” ν•¨μˆ˜λ‚˜ μ»΄ν¬λ„ŒνŠΈλ₯Ό μ •μ˜ν•©λ‹ˆλ‹€.
  4. λ‹€λ₯Έ 속성듀을 μ‚¬μš©ν•˜μ—¬ ν•„μš”ν•œ ꡬ성을 μ„€μ •ν•˜κ³  ν•„μš”ν•œ λ™μž‘μ„ μ •μ˜ν•©λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, horizontal 속성을 true둜 μ„€μ •ν•˜μ—¬ κ°€λ‘œ 슀크둀 리슀트λ₯Ό λ§Œλ“€κ±°λ‚˜, onEndReachedλ₯Ό μ‚¬μš©ν•˜μ—¬ λ¬΄ν•œ μŠ€ν¬λ‘€μ„ κ΅¬ν˜„ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  5. FlatList μ»΄ν¬λ„ŒνŠΈλ₯Ό μŠ€νƒ€μΌλ§ν•˜κ³  λ ˆμ΄μ•„μ›ƒμ„ μ‘°μ •ν•˜μ—¬ μ›ν•˜λŠ” λͺ¨μ–‘을 λ§Œλ“­λ‹ˆλ‹€.
import React from "react";
import { FlatList, Text, View } from "react-native";

const data = [
  { key: "1", text: "Item 1" },
  { key: "2", text: "Item 2" },
  // ...
];

const renderItem = ({ item }) => (
  <View style=>
    <Text>{item.text}</Text>
  </View>
);

const MyFlatList = () => <FlatList data={data} renderItem={renderItem} />;

export default MyFlatList;

πŸ€³πŸ»Β μ†μ„± :

  1. data (Type: Array) - FlatList에 ν‘œμ‹œν•  데이터λ₯Ό ν¬ν•¨ν•˜λŠ” λ°°μ—΄μž…λ‹ˆλ‹€.

    FlatList에 ν‘œμ‹œν•  ν•­λͺ©λ“€μ„ λ‹΄κ³  μžˆλŠ” λ°°μ—΄μž…λ‹ˆλ‹€.

  2. renderItem (Type: Function or Component) - 각 ν•­λͺ©μ„ λ Œλ”λ§ν•˜λŠ” 데 μ‚¬μš©λ˜λŠ” ν•¨μˆ˜ λ˜λŠ” μ»΄ν¬λ„ŒνŠΈμž…λ‹ˆλ‹€. 이 속성은 ν•„μˆ˜μž…λ‹ˆλ‹€.

    각 ν•­λͺ©μ„ 화면에 μ–΄λ–»κ²Œ ν‘œμ‹œν• μ§€ μ •μ˜ν•˜λŠ” ν•¨μˆ˜ λ˜λŠ” μ»΄ν¬λ„ŒνŠΈμž…λ‹ˆλ‹€.

  3. keyExtractor (Type: Function) - 각 ν•­λͺ©μ˜ κ³ μœ ν•œ ν‚€λ₯Ό μΆ”μΆœν•˜κΈ° μœ„ν•œ ν•¨μˆ˜λ₯Ό μ •μ˜ν•©λ‹ˆλ‹€.

    각 ν•­λͺ©μ— λŒ€ν•œ κ³ μœ ν•œ μ‹λ³„μžλ₯Ό μΆ”μΆœν•˜λŠ” ν•¨μˆ˜λ₯Ό μ§€μ •ν•©λ‹ˆλ‹€.

  4. horizontal (Type: Boolean) - 리슀트λ₯Ό κ°€λ‘œλ‘œ μŠ€ν¬λ‘€ν• μ§€ μ—¬λΆ€λ₯Ό μ„€μ •ν•©λ‹ˆλ‹€. true둜 μ„€μ •ν•˜λ©΄ κ°€λ‘œ 슀크둀 리슀트둜 λ³€κ²½λ©λ‹ˆλ‹€.

    λ¦¬μŠ€νŠΈκ°€ κ°€λ‘œ λ°©ν–₯으둜 μŠ€ν¬λ‘€ν• μ§€ μ—¬λΆ€λ₯Ό λ‚˜νƒ€λ‚΄λŠ” λΆ€μšΈ κ°’μž…λ‹ˆλ‹€.

  5. numColumns (Type: Integer) - κ·Έλ¦¬λ“œ λ ˆμ΄μ•„μ›ƒμ„ μ‚¬μš©ν•  λ•Œ μ—΄μ˜ 수λ₯Ό μ§€μ •ν•©λ‹ˆλ‹€.

    κ·Έλ¦¬λ“œ ν˜•μ‹μ˜ 리슀트λ₯Ό λ§Œλ“€ λ•Œ ν•œ ν–‰λ‹Ή μ—΄μ˜ 수λ₯Ό μ„€μ •ν•©λ‹ˆλ‹€.

  6. columnWrapperStyle (Type: Style Object) - κ·Έλ¦¬λ“œ λ ˆμ΄μ•„μ›ƒμ—μ„œ 각 열을 λž˜ν•‘ν•˜λŠ” 뷰의 μŠ€νƒ€μΌμ„ μ •μ˜ν•©λ‹ˆλ‹€.

    κ·Έλ¦¬λ“œ λ ˆμ΄μ•„μ›ƒμ˜ 열을 λž˜ν•‘ν•˜λŠ” 뷰의 μŠ€νƒ€μΌμ„ μ§€μ •ν•˜λŠ” μŠ€νƒ€μΌ κ°μ²΄μž…λ‹ˆλ‹€.

  7. ListHeaderComponent (Type: Component) - 리슀트의 맨 μœ„μ— μΆ”κ°€ν•  μ»΄ν¬λ„ŒνŠΈλ₯Ό μ •μ˜ν•©λ‹ˆλ‹€.

    리슀트의 맨 μœ„μ— ν‘œμ‹œλ˜λŠ” μ»΄ν¬λ„ŒνŠΈλ‘œ, 주둜 제λͺ©μ΄λ‚˜ 헀더 정보λ₯Ό ν‘œμ‹œν•˜λŠ” 데 μ‚¬μš©λ©λ‹ˆλ‹€.

  8. ListFooterComponent (Type: Component) - 리슀트의 맨 μ•„λž˜μ— μΆ”κ°€ν•  μ»΄ν¬λ„ŒνŠΈλ₯Ό μ •μ˜ν•©λ‹ˆλ‹€.

    리슀트의 맨 μ•„λž˜μ— ν‘œμ‹œλ˜λŠ” μ»΄ν¬λ„ŒνŠΈλ‘œ, μΆ”κ°€ μ •λ³΄λ‚˜ 더 λ§Žμ€ ν•­λͺ©μ„ ν‘œμ‹œν•˜λŠ” 데 μ‚¬μš©λ©λ‹ˆλ‹€.

  9. ItemSeparatorComponent (Type: Component) - ν•­λͺ© κ°„μ˜ ꡬ뢄선을 μ •μ˜ν•˜λŠ” μ»΄ν¬λ„ŒνŠΈμž…λ‹ˆλ‹€.

    ν•­λͺ© 사이에 ν‘œμ‹œλ˜λŠ” ꡬ뢄선을 λ‚˜νƒ€λ‚΄λŠ” μ»΄ν¬λ„ŒνŠΈμž…λ‹ˆλ‹€.

  10. ListEmptyComponent (Type: Component) - 데이터가 λΉ„μ–΄ μžˆμ„ λ•Œ ν‘œμ‹œν•  μ»΄ν¬λ„ŒνŠΈλ₯Ό μ •μ˜ν•©λ‹ˆλ‹€.

    데이터가 λΉ„μ–΄ μžˆμ„ λ•Œ μ‚¬μš©μžμ—κ²Œ λ©”μ‹œμ§€λ₯Ό ν‘œμ‹œν•˜λŠ” 데 μ‚¬μš©λ˜λŠ” μ»΄ν¬λ„ŒνŠΈμž…λ‹ˆλ‹€.

  11. initialNumToRender (Type: Integer) - 처음 λ Œλ”λ§ν•  ν•­λͺ©μ˜ 개수λ₯Ό μ„€μ •ν•©λ‹ˆλ‹€.

    졜초 λ Œλ”λ§ μ‹œμ— λͺ‡ 개의 ν•­λͺ©μ„ 화면에 ν‘œμ‹œν• μ§€ μ„€μ •ν•©λ‹ˆλ‹€.

  12. onEndReached (Type: Function) - 리슀트의 끝에 λ„λ‹¬ν–ˆμ„ λ•Œ ν˜ΈμΆœλ˜λŠ” ν•¨μˆ˜λ₯Ό μ •μ˜ν•©λ‹ˆλ‹€.

    μ‚¬μš©μžκ°€ 리슀트의 끝으둜 μŠ€ν¬λ‘€ν–ˆμ„ λ•Œ ν˜ΈμΆœλ˜λŠ” ν•¨μˆ˜λ₯Ό μ§€μ •ν•©λ‹ˆλ‹€.

  13. onEndReachedThreshold (Type: Floating-Point Number) - onEndReached μ΄λ²€νŠΈκ°€ 호좜되기 전에 슀크둀 μœ„μΉ˜λ₯Ό μ–Όλ§ˆλ‚˜ κ°€κΉŒμ΄ ν•΄μ•Ό ν•˜λŠ”μ§€ μ„€μ •ν•©λ‹ˆλ‹€.

    onEndReached μ΄λ²€νŠΈκ°€ 호좜되기 전에 슀크둀 μœ„μΉ˜λ₯Ό μ–Όλ§ˆλ‚˜ κ°€κΉŒμ΄ ν•΄μ•Ό ν•˜λŠ”μ§€λ₯Ό λ‚˜νƒ€λ‚΄λŠ” λΆ€λ™μ†Œμˆ˜μ  μˆ«μžμž…λ‹ˆλ‹€.

  14. refreshing (Type: Boolean) - μƒˆλ‘œκ³ μΉ¨ 인디케이터λ₯Ό ν‘œμ‹œν•˜λ €λ©΄ true둜 μ„€μ •ν•˜κ³  onRefresh ν•¨μˆ˜λ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€.

    μ‚¬μš©μžμ—κ²Œ μƒˆλ‘œκ³ μΉ¨ λ™μž‘μ„ μ œκ³΅ν•˜κ³  ν•΄λ‹Ή λ™μž‘μ„ μ²˜λ¦¬ν•˜λŠ” 데 μ‚¬μš©λ˜λŠ” λΆ€μšΈ κ°’μž…λ‹ˆλ‹€.

  15. onRefresh (Type: Function) - μƒˆλ‘œκ³ μΉ¨ λ™μž‘μ„ μ²˜λ¦¬ν•˜λŠ” ν•¨μˆ˜λ₯Ό μ •μ˜ν•©λ‹ˆλ‹€.

    μ‚¬μš©μžκ°€ μƒˆλ‘œκ³ μΉ¨ λ™μž‘μ„ μ‹œμž‘ν•  λ•Œ ν˜ΈμΆœλ˜λŠ” ν•¨μˆ˜λ₯Ό μ§€μ •ν•©λ‹ˆλ‹€.

  16. extraData (Type: Arbitrary Value) - λ Œλ”λ§μ— 영ν–₯을 λ―ΈμΉ˜λŠ” λ°μ΄ν„°μ˜ λ³€κ²½ 사항을 κ°μ§€ν•˜κΈ° μœ„ν•œ 값을 μ„€μ •ν•©λ‹ˆλ‹€.

    μ»΄ν¬λ„ŒνŠΈμ˜ λ Œλ”λ§μ— 영ν–₯을 λ―ΈμΉ˜λŠ” λ°μ΄ν„°μ˜ 변경을 κ°μ§€ν•˜κ³  ν•΄λ‹Ή 값을 μ—…λ°μ΄νŠΈν•˜λŠ” 데 μ‚¬μš©λ˜λŠ” μž„μ˜μ˜ κ°’μž…λ‹ˆλ‹€.

  17. initialScrollIndex (Type: Integer) - 초기 슀크둀 μœ„μΉ˜λ₯Ό μ„€μ •ν•©λ‹ˆλ‹€.

    λ¦¬μŠ€νŠΈκ°€ 처음 λ Œλ”λ§λ  λ•Œ νŠΉμ • ν•­λͺ©μ΄ 보이도둝 초기 슀크둀 μœ„μΉ˜λ₯Ό μ„€μ •ν•˜λŠ” 데 μ‚¬μš©λ©λ‹ˆλ‹€.

  18. initialScrollOffset (Type: Integer) - 초기 슀크둀 μœ„μΉ˜μ˜ μ˜€ν”„μ…‹μ„ μ„€μ •ν•©λ‹ˆλ‹€.

    초기 슀크둀 μœ„μΉ˜μ˜ ν”½μ…€ λ‹¨μœ„ μ˜€ν”„μ…‹μ„ μ„€μ •ν•˜λŠ” 데 μ‚¬μš©λ©λ‹ˆλ‹€.

  19. removeClippedSubviews (Type: Boolean) - 화면에 보이지 μ•ŠλŠ” ν•­λͺ©μ„ 자λ₯΄κ³  μž¬μ‚¬μš©ν•˜κΈ° μœ„ν•œ μ΅œμ ν™”λ₯Ό ν™œμ„±ν™”ν•˜λ €λ©΄ true둜 μ„€μ •ν•©λ‹ˆλ‹€.

    μ„±λŠ₯ μ΅œμ ν™”λ₯Ό μœ„ν•΄ 화면에 보이지 μ•ŠλŠ” ν•­λͺ©μ„ 자λ₯΄κ³  μž¬μ‚¬μš©ν• μ§€ μ—¬λΆ€λ₯Ό μ„€μ •ν•˜λŠ” λΆ€μšΈ κ°’μž…λ‹ˆλ‹€.

  20. onViewableItemsChanged (Type: Function) - λ³΄μ΄λŠ” ν•­λͺ©μ˜ λ³€κ²½ 사항을 μ²˜λ¦¬ν•˜λŠ” ν•¨μˆ˜λ₯Ό μ •μ˜ν•©λ‹ˆλ‹€.

    화면에 λ³΄μ΄λŠ” ν•­λͺ©μ΄ 변경될 λ•Œ ν•΄λ‹Ή λ³€κ²½ 사항을 μ²˜λ¦¬ν•˜λŠ” ν•¨μˆ˜λ₯Ό μ§€μ •ν•©λ‹ˆλ‹€.

  21. viewabilityConfig (Type: Object) - onViewableItemsChangedμ—μ„œ μ‚¬μš©ν•  κ°€μ‹œμ„± 섀정을 μ§€μ •ν•©λ‹ˆλ‹€.

    onViewableItemsChanged μ΄λ²€νŠΈμ—μ„œ μ‚¬μš©ν•  κ°€μ‹œμ„± 섀정을 μ§€μ •ν•˜λŠ” κ°μ²΄μž…λ‹ˆλ‹€.