Next.js를 사용한 이전 및 다음 게시물
문제
graphql을 통해 가져온 게시물이 있는 Next.js 사이트에서 이전 및 다음 POST를 구현하는 방법은 무엇입니까? 이것은 게시물의 상세 보기에 있을 것입니다.
해결책
The solution below uses graphql and Contentful but can be modified to wherever you want to apply it.
const ARTICLE_QUERY = `
query {
articleCollection(order: publishedAt_DESC) {
items {
slug
title
excerpt
category {
title
categorySlug
}
series {
title
slug
}
body {
json
}
}
}
}
`;
async function fetchGraphQL(query) {
return fetch(
`https://graphql.contentful.com/content/v1/spaces/${process.env.SPACE_ID}`,
{
method: "POST",
headers: {
"Content-Type": "application/json",
Authorization: `Bearer ${process.env.CDA_TOKEN}`,
},
body: JSON.stringify({ query }),
}
)
.then((response) => response.json())
.catch((error) => console.error(error));
}
export async function getPostAndMorePosts(slug) {
const response = await fetchGraphQL(ARTICLE_QUERY);
const posts = response.data.articleCollection.items;
const currentPost = posts.find((post) => post.slug === slug);
const currentPostIndex = posts.findIndex((post) => post.slug === slug);
const prevPost = posts[currentPostIndex - 1] || posts[posts.length - 1];
const nextPost = posts[currentPostIndex + 1] || posts[0];
if (!currentPost) {
return {
post: false,
};
}
return {
post: currentPost,
morePosts: [prevPost, nextPost],
};
}
위의 코드에서:
fetchGraphQL
getPostAndMorePosts
를 매개변수로 사용하는 비동기 함수slug
를 내보냅니다. 여기에서 fetchGraphQL
를 사용하여 모든 게시물을 배열로 가져옵니다. currentPost
[slug].js
에서:import getPostAndMorePosts from '../../lib/api'
export async function getStaticPaths() {
...
}
export async function getStaticProps({ params }) {
const data = await getPostAndMorePosts(params.slug);
return {
props: {
post: data?.post ?? null,
morePosts: data?.morePosts ?? null,
},
};
}
export default function Post({ post, morePosts }) {
...
}
동적 페이지에서:
getPostAndMorePosts
를 가져옵니다. getStaticProps
에서 params
를 전달한 후 getStaticPaths
에서 사용합니다. getStaticProps
에서 params.slug
를 getPostAndMorePosts
로 전달하여 다음을 얻습니다.전체 구현이 포함된 저장소는 다음과 같습니다.
https://github.com/stefanjudis/jamstack-workshop/blob/main/lib/api.js
결론
감사합니다. 도움을 주신 모든 분들께 감사드립니다.
The full story of how we got here is coming in another article. It really puzzles me how there isn't a native solution for this. Gatsby has it, WordPress does as well. What happened here Next.js?
읽어주셔서 감사합니다. 연결합시다!
저의 작은 구석을 찾아주셔서 감사합니다. , Polywork 및 )에 연결해 보겠습니다.
Reference
이 문제에 관하여(Next.js를 사용한 이전 및 다음 게시물), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/psypher1/previous-and-next-post-using-nextjs-51md텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)