우리 프로젝트에서는 React Query를 쓰지 않고, Supabase의 리얼타임 통신 로직을 바로바로 하기 때문에 캐싱 처리를 미처 생각을 못했었는데 최종 발표 3일 전 리팩토링을 하다가 마지막 메세지를 가져와 lastMsg=[]에 다 넣어지기 전에 Null이 뜰때 '로딩중'을 띄어주었던 것을 UX 적으로 개선하고자 했다.
새로고침을 하면 당연히 '로딩중' 이 뜨지만, 그래도 페이지간 이동 정도 안에서는 '로딩중'이 안뜨게 하고 싶어서 일단 캐싱 데이터를 넣어줄 빈배열을 하나 만들어주고,
let cachedData = [] as LastMessageArrayType;
마지막 메세지를 가져오는 통신로직 그 다음에 가져온 데이터를 cachedData 배열에 넣어준다
const fetchChatListData = async () => {
try {
const chatListData = await getChatList();
setChatList(chatListData);
const roomIds = chatListData.map((item) => item.id);
const lastMessageArray = await fetchLastMessages(roomIds);
cachedData = lastMessageArray;
setLastMsg(lastMessageArray);
// console.log('lastMsg in fetchChatListData', lastMsg);
} catch (error) {
console.error('error in fetchChatList', error);
alert('서버와의 통신을 실패했습니다.');
}
};
그런 다음,
상태로 관리해주는 lastMsg의 초기값은 cachedData로 설정
const [lastMsg, setLastMsg] = useState<LastMessageArrayType>(cachedData);
했더니, 페이지간 이동시에는 더 이상 '로딩중'이 나오지 않았다.
물론, 지금 한 작업은 약식의 느낌이라 Next.js에서 제공해주는 caching 관련 문서를 찾아봐서 제대로 해야 할 것이다.
728x90
반응형
'부트캠프 개발일지 2023-2024 > Bootcamp 생활기록' 카테고리의 다른 글
주어진 환경, 나의 능력 안에서 최선을 다하자 (0) | 2024.02.01 |
---|---|
[18주차] 최종프로젝트 : 유저테스트 시작 (0) | 2024.01.30 |
개발자는 어디까지 타협해야할까? (1) | 2024.01.22 |
[16주차] 최종 프로젝트 : 실시간 알림 기능 구현하기 (0) | 2024.01.17 |
[16주차] 최종프로젝트 : postgresql 트리거 만들기 (0) | 2024.01.17 |