ScrollView란, 데이터의 양이 많아 화면을 넘어가게 될 때, 스크롤이 생겨 화면을 넘길 수 있게 해주는 컴포넌트이다.
ScrollView 컴포넌트가 스크롤되어 동작하기 위해서는 높이를 제한해주어야 한다. 높이 값이 제한되지 않은 자식이 있다면 부모의 높이로 제한된다.
FlatList란 ScrollView와 비슷하게 스크롤할 수 있는 컴포넌트이다. 차이점은 모든 아이템들을 한 번에 렌더링하려는 ScrollView와는 달리, FlatList는 화면 밖으로 스크롤되는 아이템들을 제거하여 렌더링을 최적화한다.
ScrollView는 모든 구성 요소를 한 번에 렌더링하여 성능이 저하될 수 있다. 지금 당장 화면에 표시되지 않을 수도 있는 모든 JS 구성 요소와 아이템들을 한 번에 생성하여 렌더링 속도가 느려지고 메모리 사용량 또한 증가한다.
FlatList는 화면에 표시되는 해당 항목을 나타내는 순간 항목들을 느리게 렌더링(renders items lazily)하고, 메모리와 처리 시간을 절약하기 위해 화면 밖으로 스크롤되는 항목들을 제거한다.
또한, FlatList는 항목, 여러 열들, 무한 스크롤 로딩, 혹은 다른 기본 지원 기능들 사이의 구분 기호를 렌더링하는 경우에도 유용하다.
import React from 'react';
import { StyleSheet, Text, SafeAreaView, ScrollView, StatusBar } from 'react-native';
const App = () => {
return (
<SafeAreaView style={styles.container}>
<ScrollView style={styles.scrollView}>
<Text style={styles.text}>
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do
eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad
minim veniam, quis nostrud exercitation ullamco laboris nisi ut
aliquip ex ea commodo consequat. Duis aute irure dolor in
reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla
pariatur. Excepteur sint occaecat cupidatat non proident, sunt in
culpa qui officia deserunt mollit anim id est laborum.
</Text>
</ScrollView>
</SafeAreaView>
);
}
const styles = StyleSheet.create({
container: {
flex: 1,
paddingTop: StatusBar.currentHeight,
},
scrollView: {
backgroundColor: 'pink',
marginHorizontal: 20,
},
text: {
fontSize: 42,
},
});
export default App;
StickyHeaderComponent
alwaysBounceHorizontal
alwaysBounceVertical
bounces
bouncesZoom
centerContent
decelerationRate
endFillColor
horizontal
indicatorStyle
스크롤 표시의 스타일을 설정한다.
'default' : 기본
'black' : 스크롤 표시가 검정색이 된다. 주로 밝은 배경에 사용.
'white' : 스크롤 표시가 하얀색이 된다. 주로 어두운 배경에 사용.
keyboardDismissMode
화면을 스크롤할 때 키보드를 닫을지 여부를 결정한다.
'none' : 스크롤해도 키보드가 닫히지 않는다.
'on-drag' : 스크롤이 시작되면 키보드가 사라진다.
keyboardShouldPersistTaps
화면을 탭했을 때, 키보드가 계속 표시되어야 하는지 결정한다.
'never' : 키보드가 열려있을 때, 현재 포커스된 텍스트 입력 칸의 외부를 탭하면 키보드가 닫힌다.
'always' : 키보드는 자동으로 닫히지 않는다. 이때 스크롤 뷰는 탭에 영향받지 않지만, 스크롤 뷰의 자식은 탭에 영향받는다.
'handled' : 스크롤 뷰의 자식이 탭된 경우, 키보드는 자동으로 닫히지 않는다.
기존의 false, true는 각각 'never'과 'always'로 대체됨.
maximumZoomScale / minimumZoomScale
최대 / 최소 허용 배율을 지정한다.
기본은 1.0
onScroll
onScrollBeginDrag
onScrollEndDrag
onScrollToTop
overScrollMode
overScroll 모드의 기본 값을 재정의한다.
'auto' : 콘텐츠가 스크롤할 의미가 있을 정도로 큰 경우에만 오버스크롤이 가능하게 한다.
'always' : 항상 오버스크롤이 가능하게 한다.
'never' : 해당 뷰의 오버스크롤을 허용하지 않는다.
persistentScrollbar
scrollToOverflowEnabled
scrollsToTop
showsHorizontalScrollIndicator
showsVerticalScrollIndicator
stickyHeaderHiddenOnScroll
사용 방법
flashScrollIndicators()
flashScrollIndicators();
scrollTo()
scrollTo(
options?: { x?: number, y?: number, animated?: boolean } | number,
deprecatedX?: number,
deprecatedAnimated?: boolean,
);
scrollToEnd()
scrollToEnd(([options]: { animated: boolean }));