MST

星途 面试题库

面试题:Next.js 中 getStaticPaths 的数据获取机制

请阐述 Next.js 里 getStaticPaths 如何获取动态路由所需的路径数据,它在服务器端还是客户端运行?以及获取的数据结构是怎样的?
26.8万 热度难度
前端开发Next.js

知识考点

AI 面试

面试题答案

一键面试
  1. 获取动态路由所需路径数据的方式
    • pages/[id].js 这样的动态路由页面中定义 getStaticPaths 函数。它通常从数据源(如数据库、文件系统等)中读取数据。例如,如果数据源是一个 JSON 文件,通过读取 JSON 文件获取所有可能的 id 值,然后返回包含这些 id 的路径数组。代码示例:
    export async function getStaticPaths() {
      const res = await fetch('https://example.com/api/data');
      const data = await res.json();
      const paths = data.map((item) => ({ params: { id: item.id.toString() } }));
      return { paths, fallback: false };
    }
    
  2. 运行环境
    • getStaticPaths服务器端 运行。它是 Next.js 静态生成过程的一部分,在构建时运行,而非在客户端浏览器中运行。这确保了在构建阶段就能确定所有动态路由的路径,以便生成相应的静态页面。
  3. 数据结构
    • getStaticPaths 函数需要返回一个对象,该对象包含两个主要属性:
      • paths:是一个数组,数组中的每个元素是一个对象,对象有 params 属性,params 是一个包含动态路由参数的对象。例如 [{ params: { id: '1' } }, { params: { id: '2' } }]
      • fallback:是一个布尔值。当设置为 false 时,表示只有 paths 中指定的路径会被静态生成;当设置为 true 时,如果用户访问一个不在 paths 中的路径,Next.js 会在用户首次请求时在服务器端生成该页面。如果设置为 blocking,Next.js 会在构建时预渲染所有可能的路径,即使它们不在 paths 中。