Next.js:使用动态路由生成静态文件的 getStaticProps 和 getStaticPaths

Sam*_*l G 14 next.js

我发现文档有点模棱两可。给定一个特许经营列表,我想在构建时呈现相关的特许经营详细信息页面,以避免在运行时访问 CMS/API,因为这些页面不会经常更改。

然而,似乎即使相关页面是在构建时使用 生成的getStaticPaths,它们仍然需要getStaticProps在运行时执行调用。这违背了生成静态页面的目的。

import {withLayout} from '../../components/layout';
import {getFranchises} from '../api/franchises';

const Franchise = (props) => {
    console.info(props);

    return (
        <>
            <h1>{props.name}</h1>
        </>
    );
};

export async function getStaticProps({params}) {
    let data = await getFranchises();

    let franchise = data.find(x => x.id === params.id);

    return {
        props: franchise
    }
}

export async function getStaticPaths() {
    let data = await getFranchises();

    // Get the paths we want to pre-render based on posts
    const paths = data.map(post => ({
        params: {id: post.id},
    }));

    // We'll pre-render only these paths at build time.
    return {paths, fallback: false}
}

export default withLayout(Franchise);
Run Code Online (Sandbox Code Playgroud)

也许,我做错了什么,但我真的很想找一些文档/演示如何使用生成在构建时静态页面next build,在从API的使用数据构建的时间,并且不需要在填入道具任何进一步调用运行

Nik*_*lev 15

双方getStaticPropsgetStaticPaths只在运行生成时间。这就是这些功能的目的。您正在正确使用它。

next dev然而,在开发模式下,getStaticPropsgetStaticPaths在每个请求上运行。

getStaticProps(静态生成)

  • 在开发模式下是否可以有相同的行为?只需运行 getStaticProps 一次? (3认同)
  • 谢谢@Nikolai,我确实在使用“下一个开发”,并在执行“下一个构建”和“下一个启动”时确认所有工作均按预期进行 (2认同)
  • 如果后备为 true 并且动态页面未预渲染,则“getStaticProps”也将为生产中的每个请求运行。 (2认同)