2026년 상식닷컴 선정 식당 & 카페 리스트
최근에 오픈한 호텔을 찾는다면 살펴보세요

리액트 네이티브에서 리스트를 구현하는 방법은 무엇인가요?

_____
Q1: 리액트 네이티브에서 리스트를 만들 때 어떤 컴포넌트를 사용하나요?
A1: 보통 `FlatList`와 `SectionList`를 사용하며, 간단한 경우에는 `ScrollView`도 사용할 수 있습니다. 가장 일반적인 것은 `FlatList`입니다.

Q2: `FlatList` 사용법은 어떻게 되나요?
A2: `FlatList`는 배열 데이터를 받아 각 항목을 렌더링합니다. 주요 필수 props는 `data`와 `renderItem`이며, 고유 키를 위한 `keyExtractor`도 자주 사용됩니다. 예:
```jsx
data={[{id: '1', name: 'Item1'}, {id: '2', name: 'Item2'}]}
keyExtractor={item => item.id}
renderItem={({item}) => {item.name}}
/>
```

Q3: `FlatList`와 `ScrollView`는 어떤 차이가 있나요?
A3: `ScrollView`는 모든 자식을 한 번에 렌더링하여 소규모 리스트에 적합하지만, 대량 데이터에서는 성능 저하가 발생합니다. `FlatList`는 화면에 보이는 아이템만 렌더링하는 가상화(virtualized) 리스트로, 많은 데이터 처리에 적합합니다.

Q4: 리스트에 헤더나 푸터를 추가하려면 어떻게 하나요?
A4: `FlatList`는 `ListHeaderComponent`와 `ListFooterComponent` props를 제공하여 헤더와 푸터 컴포넌트를 지정할 수 있습니다.
예:
```jsx
data={data}
renderItem={renderItem}
ListHeaderComponent={() => 리스트 헤더}
ListFooterComponent={() => 리스트 푸터}
/>
```

Q5: 리스트 항목을 섹션별로 나누려면 어떻게 하죠?
A5: `SectionList`를 사용합니다. 데이터는 섹션 배열 형식이며, 각각의 섹션에 `title`과 `data`가 있어야 합니다.
예:
```jsx
sections={[
{title: 'Fruits', data: ['Apple', 'Banana']},
{title: 'Vegetables', data: ['Carrot', 'Broccoli']}
]}
renderItem={({item}) => {item}}
renderSectionHeader={({section}) => {section.title}}
/>
```

Q6: 리스트에서 각 아이템 클릭 이벤트를 처리하려면?
A6: `renderItem` 함수 내에서 터치 가능한 컴포넌트 (`TouchableOpacity`, `Pressable` 등)로 감싸고 클릭 콜백을 설정합니다.
예:
```jsx
renderItem={({item}) => (
alert(item.name)}>
{item.name}

)}
```

Q7: 리스트 성능 최적화를 위해 주의할 점이 있나요?
A7:
- `keyExtractor`는 고유하고 안정적인 키를 제공해야 한다.
- 필요하면 `getItemLayout`을 구현하여 리스트 항목 높이를 알려 비동기 스크롤 성능 향상.
- `initialNumToRender`와 `maxToRenderPerBatch`로 렌더링 배치 조절.
- 가능하면 `PureComponent`나 `React.memo`를 사용해 불필요한 재렌더링 방지.

Q8: 리스트 내 아이템을 편집(추가, 삭제, 수정)하려면 어떻게 하나요?
A8: 리스트 데이터는 보통 상태(state)로 관리하고, 아이템 추가/삭제 시 상태를 업데이트하면 자동으로 UI가 갱신됩니다. 예를 들어, `useState`를 사용해 배열 상태를 관리합니다.

---

요약하면, 리액트 네이티브에서 리스트를 구현할 때 `FlatList`가 가장 기본이며, 성능과 편의성을 고려해 데이터와 렌더링 방식을 적절히 설정하면 됩니다. `SectionList`는 섹션 단위의 리스트, `ScrollView`는 소규모 리스트용으로 사용합니다.
리액트 네이티브에서 리스트를 구현하는 방법은 여러 가지가 있지만, 가장 일반적으로 사용되는 컴포넌트는 `FlatList`와 `SectionList`입니다.

이 두 컴포넌트는 성능이 뛰어나고, 대량의 데이터를 효율적으로 렌더링할 수 있도록 설계되었습니다.

아래에서는 `FlatList`와 `SectionList`를 사용하는 방법에 대해 자세히 설명하겠습니다.

1. FlatList `FlatList`는 단일 섹션의 스크롤 가능한 리스트를 구현할 때 사용됩니다.

기본적인 사용법은 다음과 같습니다.

기본 사용법 ```javascript import React from 'react'; import { FlatList, Text, View, StyleSheet } from 'react-native'; const DATA = [ { id: '1', title: 'Item 1' }, { id: '2', title: 'Item 2' }, { id: '3', title: 'Item 3' }, // ... 더 많은 데이터 ]; const Item = ({ title }) => ( {title} ); const App = () => { const renderItem = ({ item }) => ; return ( item.id} /> ); }; const styles = StyleSheet.create({ item: { padding: 20, marginVertical: 8, marginHorizontal: 16, backgroundColor: ' f9c2ff', }, title: { fontSize: 32, }, }); export default App; ``` 주요 Props - `data`: 리스트에 표시할 데이터 배열입니다.

- `renderItem`: 각 항목을 렌더링하는 함수입니다.

- `keyExtractor`: 각 항목의 고유 키를 반환하는 함수입니다.

성능 최적화를 위해 필수입니다.

- `horizontal`: 리스트를 수평으로 스크롤할지 여부를 결정합니다.

- `onEndReached`: 리스트의 끝에 도달했을 때 호출되는 함수입니다.

무한 스크롤 구현에 유용합니다.



2. SectionList `SectionList`는 여러 섹션으로 나누어진 리스트를 구현할 때 사용됩니다.

각 섹션은 제목과 항목으로 구성됩니다.

기본 사용법 ```javascript import React from 'react'; import { SectionList, Text, View, StyleSheet } from 'react-native'; const DATA = [ { title: 'Section 1', data: ['Item 1-1', 'Item 1-2', 'Item 1-3'], }, { title: 'Section 2', data: ['Item 2-1', 'Item 2-2', 'Item 2-3'], }, // ... 더 많은 섹션 ]; const App = () => { const renderItem = ({ item }) => ( {item} ); const renderSectionHeader = ({ section: { title } }) => ( {title} ); return ( item + index} /> ); }; const styles = StyleSheet.create({ item: { padding: 20, marginVertical: 8, marginHorizontal: 16, backgroundColor: ' f9c2ff', }, header: { fontSize: 24, backgroundColor: ' fff', }, }); export default App; ``` 주요 Props - `sections`: 섹션 데이터 배열입니다.

각 섹션은 제목과 데이터 배열을 포함합니다.

- `renderSectionHeader`: 각 섹션의 헤더를 렌더링하는 함수입니다.

- `stickySectionHeadersEnabled`: 섹션 헤더가 스크롤 시 상단에 고정될지 여부를 결정합니다.



3. 성능 최적화 리스트의 성능을 최적화하기 위해 다음과 같은 방법을 사용할 수 있습니다.

- getItemLayout : 항목의 크기가 일정할 경우, 이 함수를 사용하여 성능을 개선할 수 있습니다.

- initialNumToRender : 초기 렌더링 시 표시할 항목의 수를 설정합니다.

- windowSize : 스크롤 시 미리 렌더링할 항목의 수를 조정합니다.

- removeClippedSubviews : 화면에 보이지 않는 항목을 제거하여 메모리 사용량을 줄입니다.



4. 리액트 네이티브에서 리스트를 구현하는 것은 `FlatList`와 `SectionList`를 통해 간단하고 효율적으로 할 수 있습니다.

각 컴포넌트의 특성과 사용법을 이해하고, 성능 최적화 기법을 적용하면 대량의 데이터를 효과적으로 처리할 수 있습니다.

이러한 리스트 컴포넌트를 활용하여 사용자에게 매끄럽고 반응성이 뛰어난 경험을 제공할 수 있습니다.

작성자: 이윤재 [비회원] | 작성일자: 1년 전 2024-09-12 15:28:32
조회수: 127 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
내용이 부정확하다면 싫어요를 클릭해주세요.