SSR 페이지를 다시 로드하는 방법
2313 단어 javascriptnextjsssr
이것은 문제를 제기합니다. Next.js에는
refetchprops
와 같은 기능이 없지만 Vercel의 팀이 구현하기를 원하면... 저는 모두 찬성합니다. 한 가지 해결책은 페이지를 강제로 새로고침하는 것이지만 거의 안티 패턴처럼 느껴집니다.하드 새로 고침을 사용하지 않고 어떻게 이 문제를 해결할 수 있습니까? 먼저 우리가 이야기 할 때 생각하는 일반적인 SSR 흐름에 대해 이야기해야 합니다.
일반적인 SSR 흐름
서버 사이드 렌더링을 생각할 때 우리는 두 가지 흐름을 염두에 두고 있으며 일반적으로 다음과 같이 진행됩니다.
getServerSideProps
메서드를 호출하고 API의 데이터로 HTML을 생성합니다또는
Link
을 클릭하여 서버 렌더링 페이지로 이동합니다. getServerSideProps
메서드를 호출합니다. 대신 데이터를 JSON으로 보냅니다. 해결책
따라서 해결책은 Next.js
router
의 내장 기능을 사용하는 것입니다. 이것을 사용하여 우리는 Next.js에게 하드 새로 고침 없이 SSR에서 최신을 검색하도록 요청할 수 있습니다. 급한 경우 해결책은 다음과 같습니다. import { useRouter } from 'next/router';import { useRouter } from 'next/router';
export default function YourPage(props) {
const router = useRouter();
const dataToUpdate = //some object;
// API that updates your DB
const update = fetch('api/update',{
method: 'PUT',
body: JSON.stringify(dataToUpdate),
});
if(update.status == 200) {
// ask next router to replace the current path with the current path.
router.replace(router.asPath);
}
}
어떻게 작동합니까?
SSR을 두 번째 경로로 설명할 때 클라이언트 측 전환을 통해 Next
Link
를 사용할 때 Next.js가 JSON을 반환하는 방법에 대해 이야기했습니다. 이것이 바로 router.replace
를 사용하여 Next.js에 클라이언트 측 전환을 수행하도록 지시하는 것입니다.If you are wondering what
router.replace
does, it does the exact same thing asroute.push
except it doesn't add history to the stack. This means if the user hits the back button it will perform as expected
즉, 이 클라이언트 측 전환이 발생하면
getServerSideProps
가 실행되고 JSON이 데이터베이스 또는 API의 최신 정보와 함께 반환됩니다.
Reference
이 문제에 관하여(SSR 페이지를 다시 로드하는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/perkinsjr/how-to-reload-an-ssr-page-2a9g텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)