2023.12.28
GeunYeong Kim
최신화된 정보가 크게 필요하지 않은 부분에서 http request가 계속 일어나고 있었다.
refetchOnMount : false
로 옵션을 변경해도 동일했다. const queryClient = new QueryClient({
defaultOptions: {
queries: {
retry: false,
useErrorBoundary: true,
staleTime: 60000,
cacheTime: 3600000,
refetchOnWindowFocus: false,
refetchOnMount: false,
refetchOnReconnect: false,
},
mutations: {
useErrorBoundary: true,
},
},
});
Next.js는 일반 React와 다르게 페이지 이동시에 _app.tsx부터 새롭게 렌더링되는 방식을 사용한다.
따라서 queryClient가 페이지 이동시에 계속 생성되어 캐시가 리셋되었던 것..!
React의 App.js는 첫 접속 후에 queryClient는 선언되고 그대로 유지되지만, Next.js는 페이지를 이동하게 되면 _App.js 부터 새롭게 렌더링 되는 방식이기 때문에, useState를 이용해 단 한번만 선언되게 만들어줍니다. 이렇게 하지 않으면 계속 새로운 QueryClient가 생성되고 전파되기 때문에 기존 데이터가 유실되는 상황이 발생합니다.
const [queryClient] = useState(
() =>
new QueryClient({
defaultOptions: {
queries: {
retry: false,
useErrorBoundary: true,
staleTime: 60000,
cacheTime: 3600000,
refetchOnWindowFocus: false,
refetchOnMount: false,
refetchOnReconnect: false,
},
mutations: {
useErrorBoundary: true,
},
},
}),
);
끝