1) 방법1 - webview 프롭 이용
react-native-webview
의 프롭으로 아래와 같이 설정하면 됨.
<WebView style={{ flex: 1 }}
startInLoadingState={true} //로딩 상태를 true로 시작.
renderLoading={() => { //로딩 시 ActivityIndicator 출력.
return (
<ActivityIndicator
color='#bc2b78'
size='large'
styles={styles.activityIndicator}
/>
);
}}
source={{
uri: url
}}
sharedCookiesEnabled={true}
/>
2) 방법2 - 이벤트&상태로 visible로 관리
- react-native-webview 프롭 이용
onLoad
이벤트는 로딩 완료 시 호출됨.onLoadStart
이벤트는 로딩 시작 시 호출됨.
- 위의 두 이벤트 함수를 이용해서 visible state를 바꿔서 indicator 표시/숨김 결정.
import React, { useState } from 'react'
import { View, StyleSheet, ActivityIndicator } from 'react-native'
import { WebView } from 'react-native-webview'
function SettingsWebView({ route, navigation }) {
const [isLoading, setIsLoading] = useState(true);
const url = route.params.url;
console.log("url : ", url);
return (
<View style={{ flex: 1 }}>
<WebView
onLoadStart={() => (setIsLoading(true))}
onLoad={() => setIsLoading(false)}
style={{ flex: 1 }}
source={{ uri: url }}
/>
{isLoading && (
<ActivityIndicator
style={styles.activityIndicator}
size="large"
color="#000"
/>
)}
</View>
);
}
const styles = StyleSheet.create({
activityIndicator: {
flex: 1,
left: 0,
right: 0,
top: 0,
bottom: 0,
position: 'absolute',
alignItems: 'center',
justifyContent: 'center'
},
})
export default SettingsWebView;