如何在使用nextjs构建的prismic应用程序中获取数据?

hfwmuf9z  于 2023-03-29  发布在  其他
关注(0)|答案(1)|浏览(167)

👋
我用primsic和nextjs构建了我的应用程序。
在着陆页上,我想只显示我的网页3 aritcles,然后如果用户单击下一页按钮,我想显示下一个3 aritcles页面
我有index页面,其中包括以下 prop 。我如何使用以下响应数据为我的下3个aritcles获取数据。next_page是下一个aritcles的API URL。
有没有办法使用prismic API或nextjs api来获取数据?

articles:
{
    "page": 1,
    "results_per_page": 3,
    "results_size": 3,
    "total_results_size": 14,
    "total_pages": 5,
    "next_page": "https://myapp.cdn.prismic.io/api/v2/documents/search?ref=Y-N6RxAAACEAh2Gz&q=%5B%5Bat%28document.type%2C+%22article%22%29%5D%5D&orderings=%5Bmy.article.publishDate+desc%2Cdocument.first_publication_date+desc%5D&page=2&pageSize=3",
    "prev_page": null,
    "results": [
        {title: "result 1"},
        {title: "result 2"},
        {title: "result 3"},
    ],
    "license": "All Rights Reserved"
}
const Index = ({ articles, navigation, settings, pathname }) => {
  
  return (
    <Layout>
      <Bounded size="widest">
        <ul className="grid grid-cols-1 gap-16">
          {articles?.results.map((article) => (
            <Article key={article.id} article={article} />
          ))}
        </ul>
        <NextLink href={articles.next_page}>test</NextLink>
      </Bounded>
    </Layout>
  );
};

export default Index;

export async function getStaticProps({ previewData }) {
  const client = createClient({ previewData });

  const articles = await client.getByType("article", {
    orderings: [
      { field: "my.article.publishDate", direction: "desc" },
      { field: "document.first_publication_date", direction: "desc" },
    ],
    pageSize: 3,
  });
  const navigation = await client.getSingle("navigation");
  const settings = await client.getSingle("settings");
  console.log(articles);
  return {
    props: {
      articles,
      navigation,
      settings,
    },
  };
}
gtlvzcf8

gtlvzcf81#

Prismic page Rest API查询参数允许您指定结果的偏移量。
使用Next.js实现这一点的最直接方法是在URL中包含page参数。这可以使用动态路由(例如https://example.com/blog/page-2通过pages/blog/[page].js)或URL参数(例如https://example.com/blog?page=2)来完成。
您可以像这样将page参数传递给查询(注意params.page的使用):

export async function getStaticProps({ params, previewData }) {
  const client = createClient({ previewData });

  const articles = await client.getByType("article", {
    orderings: [
      { field: "my.article.publishDate", direction: "desc" },
      { field: "document.first_publication_date", direction: "desc" },
    ],
    pageSize: 3,
    page: params.page,
  });

  return {
    props: {
      articles,
    },
  };
}

响应的next_pageprev_page值可用于确定下一页或上一页是否可用。如果它具有值(URL),则可以安全地链接到下一页/上一页。如果值为null,则不应链接到下一页/上一页。
请注意,您不会在API响应中使用next_page/prev_page URL作为链接;这是一个到Rest API的链接。

相关问题