지금까지는 모두 오류없이 제대로 작동한다는 가정 하에 작업했다.
하지만 현실에서는 당연히 오류가 발생할 수 있다.
따라서 로딩상태 확인과 더불어 표시할 데이터가 있는지도 확인하고자 한다.
오류로 인식되지는 않지만, 데이터가 없는 경우가 발생할 수 있기 때문.
가령 Firebase에 있는 모든 데이터를 삭제하여 데이터가 없어도 요청은 성공적으로 전송할 수 있다.
하지만 로드할 데이터가 없으므로 아무 데이터가 없는 응답을 얻는다.
const results = [ ];
데이터가 없는 경우에 대해 처리하는 방법은 쉽다.
루프를 거칠 데이터가 없기 때문에 results도 빈 배열로 남는다.
.then((data) => {
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;
});
isLoading으로 로딩상태를 확인해야할 뿐만 아니라, v-else-if로 로딩상태가 아니면서 results.length, 즉 데이터 길이가 0보다 큰 데이터를 찾는다.
길이가 0이라면 빈 배열일테고, 데이터가 없다는 것을 의미한다.
추가로 results값이 참인지 확인할 수도 있다. results.length를 알아보기 전에 넣어주면 좋다.
여기서는 results가 항상 존재하지만, 다른 앱에서는 데이터 로드에 실패하면 설정 자체가 불가능할 수 있다. 그래서 results값 역시 확인해주는 것이 좋다.
또다른 문단 <p>를 이용해서 "No stored experiences found. Start adding some survey results first."와 같은 문구를 추가해보자.
로딩중도 아니고, 결과값으로 나오는 데이터가 없거나 결과값의 길이가 0인 경우, 이 문구가 표시되도록 설정하자.
<p v-if="isLoading">Loading...</p>
<p v-else-if="!isLoading && (!results || results.length === 0)">
No stored experiences found. Start adding some survey results first.
</p>
<ul v-else-if="!isLoading && results && results.length > 0">
<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] 163. 오류 응답 처리하기 (0) | 2023.09.23 |
---|---|
[Udemy Vue 완벽가이드 Section13] 162. 기술적 오류와 브라우저 측 오류 처리하기 (0) | 2023.09.23 |
[Udemy Vue 완벽가이드 Section12] 160. “로딩 중..” 메시지 표시하기 (0) | 2023.09.22 |
[Udemy Vue 완벽가이드 Section12] 159. 컴포넌트가 마운트될때 데이터 로딩하기 (0) | 2023.09.18 |
[Udemy Vue 완벽가이드 Section12] 155. 데이터 저장을 위해 POST 요청 보내기 (0) | 2023.09.18 |