Вы можете сделать это, используя getStaticPaths
с fallback
, установленным на true
, чтобы получить параметры (не запрос) и создать страницу stati c во время запроса.
В этом случае, когда посетители посещают пути, которые не были созданы во время сборки, Next. js будет обслуживать "резервную" версию страницы при первом запросе на такой путь (это может быть просто <div>Loading...</div>
)
Далее. js затем запустит getStaticProps
и создаст страницу и данные json в первый раз и будет обслуживать посетителя, когда будет готов.
Далее. js также добавляет этот путь в список предварительно обработанных страниц, поэтому последующие запросы к тому же пути будут обслуживать сгенерированную страницу, как и другие страницы, предварительно обработанные во время сборки.
В вашем случае вы не можете просто заменить getServerSideProps
на getStaticPaths
. Вам нужно будет создать [postSlug].js
, чтобы использовать параметр postSlug
.
// Example code
import { useRouter } from 'next/router';
function Post({ post }) {
const router = useRouter();
if (router.isFallback) return <div>Loading...</div>;
// Render post...
}
export async function getStaticPaths() {
return {
paths: [{ params: { postSlug: 'sth' } }, { params: { postSlug: 'sth-else' } }],
fallback: true,
};
}
export async function getStaticProps({ params }) {
const res = await fetch(`https://.../posts/${params.postSlug}`);
const post = await res.json();
return {
props: { post },
}
}
export default Post;
Чтобы обновить статически сгенерированные страницы, проверьте Далее. js Incremental Stati c Regeneration