로딩 인디케이터(Loading Indicator)는 UI에서 처리 중인 요청이 완료되기까지 시간이 걸린다는 사실을 사용자에게 알려주는 역할을 합니다. 예를 들어 폼 작성 후 제출 버튼을 클릭했거나, 데이터를 불러오기 위해 검색 버튼을 눌렀을 때 유용하게 사용됩니다.
React Native는 ActivityIndicator 컴포넌트를 기본으로 제공하며, 이를 활용하면 다양한 방식으로 화면에 로딩 인디케이터를 손쉽게 표시할 수 있습니다.
ActivityIndicator 기본 사용법
가장 기본적인 ActivityIndicator 컴포넌트의 사용 형태는 다음과 같습니다.
<ActivityIndicator animating={animating} color='#bc2b78' size="large" style={yourStyle}/>
ActivityIndicator를 사용하려면 먼저 아래와 같이 react-native에서 임포트해야 합니다.
import { ActivityIndicator } from 'react-native';
ActivityIndicator 주요 속성(Props)
| 번호 | 속성 및 설명 |
|---|---|
| 1 | animating 로딩 인디케이터의 애니메이션 여부를 결정합니다. true이면 인디케이터를 표시하고, false이면 숨깁니다. |
| 2 | color 로딩 인디케이터에 표시할 색상을 지정합니다. |
| 3 | hidesWhenStopped 애니메이션이 멈추었을 때 인디케이터를 숨길지 여부를 설정합니다. true/false 값을 가집니다. |
| 4 | size 인디케이터의 크기를 지정합니다. 'small'과 'large' 두 가지 값을 사용할 수 있습니다. |
예제: 로딩 인디케이터 표시하기
로딩 인디케이터는 ActivityIndicator를 통해 구현되므로, 먼저 필요한 컴포넌트들을 임포트합니다.
import { ActivityIndicator, View, StyleSheet } from 'react-native';
여기서 사용된 ActivityIndicator 컴포넌트는 다음과 같습니다.
<ActivityIndicator
animating={animating}
color='#bc2b78'
size="large"
style={styles.activityIndicator}/>
animating 값은 기본값이 true인 state 변수에 연결됩니다. closeActivityIndicator 메서드는 componentDidMount() 함수 내부에서 호출되며, 60초(1분)가 지난 후 animating 상태를 false로 변경하여 인디케이터를 숨깁니다.
state = { animating: true }
closeActivityIndicator = () => setTimeout(() => this.setState({
animating: false }), 60000)
componentDidMount = () => this.closeActivityIndicator()
다음은 로딩 인디케이터를 화면에 표시하는 전체 코드입니다.
import React, { Component } from 'react';
import { ActivityIndicator, View, StyleSheet } from 'react-native';
class ActivityIndicatorExample extends Component {
state = { animating: true }
closeActivityIndicator = () => setTimeout(() => this.setState({
animating: false }), 60000)
componentDidMount = () => this.closeActivityIndicator()
render() {
const animating = this.state.animating
return (
<View style={styles.container}>
<ActivityIndicator
animating={animating}
color='#bc2b78'
size="large"
style={styles.activityIndicator}/>
</View>
)
}
}
export default ActivityIndicatorExample
const styles = StyleSheet.create ({
container: {
flex: 1,
justifyContent: 'center',
alignItems: 'center',
marginTop: 70
},
activityIndicator: {
flex: 1,
justifyContent: 'center',
alignItems: 'center',
height: 80
}
})
실행 결과
