23.08.10
오늘 한 일
- 카공실록 home 페이지 리팩토링 완료
- gloddy 디자인 시스템 적용
🥲
vscode 너무 느리다.. 포맷팅 하는데에만 하루종일 걸린다..
next도 느려... 왜이럴까...?
이슈(카공실록) - prefetch해서 데이터를 가져왔을 때 이전 데이터가 겹치는 현상
현재 페이지 쪽 코드는 다음과 같다.
home
에서는placeAround
데이터를 미리 가져와서 hydrateplace
에서는place
데이터를 미리 가져와서 hydrate
// home
<QueryAsyncBoundary
rejectedFallback={<div>에러가 발생했습니다.</div>}
pendingFallback={<Loading />}
>
<HydrationProvider
queryFn={() => getPlacesAround(DEFAULT_COORDINATES)}
queryKey={Keys.placesAround(DEFAULT_COORDINATES)}
>
<HomeDetail />
</HydrationProvider>
</QueryAsyncBoundary>
// place
<QueryAsyncBoundary
rejectedFallback={<div>에러가 발생했습니다.</div>}
pendingFallback={<Loading />}
>
<HydrationProvider queryKey={PlaceKeys.place(placeId)} queryFn={() => getPlace(placeId)}>
<PlaceDetail />
</HydrationProvider>
</QueryAsyncBoundary>
근데 이렇게 하면 home
페이지에서 place
페이지로 이동했을 때, home
페이지에서 가져온 데이터가 place
페이지에도 적용되는 문제가 발생한다.
이게 무슨 말이냐 하면, 분명 place 페이지에서 가져온 데이터를 hydrate 했는데, 이 데이터가 placeAround
데이터로 받아오게 된다.
🤔왜 이럴까?
캐싱 때문이라고 생각한다. 다른 api 요청을 보냈는데 이상한 데이터가 들어오는 것은 캐싱 말고는 떠오르는게 없다.
🤔어떻게 해결할까?
hydrate 과정을 없애면 해결되긴 한다. 일단 이 방법은 최후의 수단으로 두었다.
cache 설정
캐시를 저장하지 않도록 설정했다. 이 방법은 SSR 방식과 같다.
export const getPlace = async (id: number) => {
const { data } = await api.get<Place>(`api/v1/places/${id}`, { cache: 'no-store' });
return data;
};
export const getPlacesAround = async (params: PlacesAround) => {
const { data } = await api.get<{ places: Place[] }>('api/v1/places/around', {
searchParams: { ...params },
cache: 'no-store',
});
return data;
};
이렇게 하면 캐시를 저장하지 않기 때문에 데이터가 겹치는 현상은 해결된다.
음.. 근데 뭔가 찝찝하다. 분명 뭔가 잘못된 것 같은 느낌이 든다. 확실한 원인을 찾고 해결해야겠다.
내일 할 일
- gloddy 버튼 공통 컴포넌트 구현
- 카공실록 api 연결 진행