#next.js #getstaticprops #getstaticpaths
Вопрос:
Содержимое страницы:
import { useRouter } from "next/router";
export default function Gunluk({ data }) {
let router = useRouter()
const { slug } = router.query;
return slug;
}
И показать на странице
60d6180ea9284106a4fd8441 (https://…/gunluk/60d6180ea9284106a4fd8441 идентификатор в URL-адресе)
Таким образом, я могу получить идентификатор, но я не знаю, как передать его в API.
export async function getStaticProps(context) {
const res = await fetch(`http://localhost:3000/api/books-i-have`)
const data = await res.json()
if (!data) {
return {
notFound: true,
}
}
return {
props: { data }, // will be passed to the page component as props
}
}
Обычно я использую это, но в slug это не сработало. Я попробовал оба других метода, но потерпел неудачу (https://nextjs.org/docs/basic-features/data-fetching).
Короче говоря, как вы подключаетесь к API со страницы Slug?
Каталог файлов:
pages/
gunluk/
[...slug].js
index.js
Комментарии:
1. Параметр контекста — это объект, содержащий ключ параметров, который будет иметь ваше значение slug, вы можете использовать это значение для вызова API. Я опубликовал ответ с кодом
Ответ №1:
Вы можете получить значение slug в getStaticProps и использовать его для вызова api на основе slug
export async function getStaticPaths() {
const idList = await fetchAllIds();
const paths = [
];
idList.forEach((id) => {paths.push(`/gunluk/${id}`)})
return { paths, fallback: true };
}
export async function getStaticProps({ params }) {
const { slug } = params;
try {
const data= await fetchGunluk(slug);
return data? { props: { data} } : { notFound: true };
} catch (error) {
console.error(error);
return { notFound: true };
}
}
Комментарии:
1. когда я добавил его, он вернул ошибку сервера Ошибка: getStaticPaths требуется для динамических страниц SSG и отсутствует для » /gunluk/[…slug]». Подробнее читайте: nextjs.org/docs/messages/invalid-getstaticpaths-value
2. Можете ли вы привести пример для getStaticPaths()
3. Я добавил пример getStaticPath для вашей справки
Ответ №2:
Я верю, что то, что вы ищете, — это getStaticPaths