새로고침이나 데이터를 로드할 때 Firebase와 나의 인터넷이 빠르기 때문에 대부분은 상당히 빠르게 로드가 끝난다.
만약 속도가 느린 서버와 통신하거나, Vue 애플리케이션 유저의 인터넷 연결이 느린 경우, 데이터를 로드하는데 시간이 걸릴 수 있다.
이 경우 로딩 아이콘이나 로딩 메시지를 띄워보자.
UserExperiences.vue 파일에서 데이터를 로드 및 표시하게되는데, 데이터가 완전히 로드된 후 이 데이터 목록을 표시하고자한다.
데이터 로드 중에는 로딩메시지가 표시되도록 해보자.
새로운 data 프로퍼티를 추가해서 쉽게 실행할 수 있다. ex: isLoading
초기에는 false로 설정해보자. 그리고 loadExperiences 메서드가 트리거될때마다 fetch가 시작되기 전에 this.isLoading = true;로 설정해보자.
이후 데이터 로드가 모두 끝나면 다시 this.isLoading = false;로 설정하자.
loadExperiences() {
this.isLoading = true; // fetch시작 전 true로 설정.
fetch(
'https://vue-http-***.firebaseio.com/surveys.json'
)
.then((response) => {
if (response.ok) {
return response.json();
}
})
.then((data) => {
this.isLoading = false; //여기에 this.isLoading을 false로 설정.
const results = [];
for (const id in data) {
results.push({
id: id,
name: data[id].name,
rating: data[id].rating,
});
}
this.results = results;
});
//this.isLoading = false; // 이 지점에 추가x.
},
this.isLoading = false 코드를 fetch함수 이후에 추가해서는 안된다.
JavaScript는 fetch가 끝날 때까지 기다리지 않는다. 따라서 fetch함수 실행 후, 바로 다음 줄인 this.isLoading = false가 실행된다. 따라서 로딩메시지가 보이지 않는다.
then 함수에 있는 코드만 fetch 실행완료 이후에 실행된다. 그래서 isLoading값 변경은 then 안에 추가해야한다.
이제 isLoading 프로퍼티를 사용할 수 있는데, v-if를 통해서 데이터가 로드 중이 아니라면 데이터를 표시하고, 로드 중이라면 로딩 아이콘이나 텍스트를 표시하자.
isLoading값이 true라면 'Loading...' 텍스트가 표시되도록 하자.
<p v-if="isLoading">Loading...</p>
<ul v-else>
<survey-result
v-for="result in results"
:key="result.id"
:name="result.name"
:rating="result.rating"
></survey-result>
</ul>
새로고침해보자.
제대로 잘 작동한다. 데이터가 도착하기까지 기다리는 동안 로딩 아이콘 또는 로딩 메시지를 띄울 수 있다.
** 출처: 모든 내용은 Udemy Vue-완벽가이드 강의를 기반으로 작성하였습니다.
'Vue.js' 카테고리의 다른 글
[Udemy Vue 완벽가이드 Section13] 162. 기술적 오류와 브라우저 측 오류 처리하기 (0) | 2023.09.23 |
---|---|
[Udemy Vue 완벽가이드 Section12] 161. “데이터 없음" 상태처리하기 (0) | 2023.09.22 |
[Udemy Vue 완벽가이드 Section12] 159. 컴포넌트가 마운트될때 데이터 로딩하기 (0) | 2023.09.18 |
[Udemy Vue 완벽가이드 Section12] 155. 데이터 저장을 위해 POST 요청 보내기 (0) | 2023.09.18 |
[Udemy Vue 완벽가이드 Section12] 154. HTTP요청을 보내는 방법과 보내지 않는 방법 (0) | 2023.09.17 |