返回

Next.js 9.3 中 getStaticProps、getStaticPaths 和 getServerSideProps的新特性概述

前端

在 Next.js 9.3 中,我们对数据获取和页面渲染进行了重大改进。我们更新了 getStaticProps、getStaticPaths 和 getServerSideProps API,以提供更大的灵活性、对动态数据的更好支持以及更强大的路由支持。

更新的 getStaticProps 和 getStaticPaths API

在 Next.js 9.3 中,getStaticProps 和 getStaticPaths API 已经过更新,以支持动态数据。这意味着您现在可以从外部数据源(如数据库或 API)获取数据,并在构建时将其静态呈现到您的页面中。

要使用动态数据,您需要在您的页面中使用动态路由。动态路由允许您在路由中使用参数,以便您可以从 URL 中获取数据。例如,您可以使用以下动态路由来获取特定产品的详细信息:

/products/[productId]

然后,您可以在您的页面中使用 getStaticProps 函数来从 API 中获取产品详细信息,并将其静态呈现到页面中。

export async function getStaticProps({ params }) {
  const product = await fetchProduct(params.productId);

  return {
    props: {
      product,
    },
  };
}

新的 getServerSideProps API

Next.js 9.3 还引入了新的 getServerSideProps API。getServerSideProps API 允许您在每次请求时在服务器端渲染您的页面。这意味着您可以从外部数据源(如数据库或 API)获取数据,并在每次请求时将其动态呈现到您的页面中。

要使用 getServerSideProps API,您需要在您的页面中使用它。

export async function getServerSideProps(context) {
  const product = await fetchProduct(context.params.productId);

  return {
    props: {
      product,
    },
  };
}

更强大的路由支持

Next.js 9.3 还提供了更强大的路由支持。现在,您可以使用动态路由、嵌套路由和可选路由来创建更复杂的应用程序。

要使用动态路由,您需要在您的页面文件中使用动态路由语法。例如,您可以使用以下动态路由来获取特定产品的详细信息:

/products/[productId]

要使用嵌套路由,您需要在您的 pages 文件夹中创建子文件夹。例如,您可以创建一个名为 products 的子文件夹,并在其中创建 product.js 页面。然后,您可以在 product.js 页面中使用以下嵌套路由来获取特定产品的详细信息:

[productId]

要使用可选路由,您需要在您的动态路由中使用问号 (?)。例如,您可以使用以下可选路由来获取特定产品的详细信息,但如果该产品不存在,则显示 404 页面:

/products/[productId?]

对动态数据的改进处理

Next.js 9.3 还对动态数据的处理进行了改进。现在,您可以使用 useSWR 钩子从外部数据源获取数据,并在您的页面中动态呈现该数据。

要使用 useSWR 钩子,您需要在您的页面中安装 swr 包。

npm install swr

然后,您可以在您的页面中使用 useSWR 钩子来从外部数据源获取数据。

import useSWR from 'swr';

export default function ProductDetails() {
  const { data, error } = useSWR(`/api/products/${productId}`);

  if (error) return <div>Error</div>;
  if (!data) return <div>Loading...</div>;

  return (
    <div>
      <h1>{data.name}</h1>
      <p>{data.description}</p>
    </div>
  );
}

结论

Next.js 9.3 中的新特性为数据获取和页面渲染提供了更大的灵活性、更强大的路由支持和对动态数据的改进处理。这些特性可以帮助您创建更复杂、更动态的应用程序。