为了账号安全,请及时绑定邮箱和手机立即绑定

Next.js动态路由错误:提供的路径`page-name`与页面不匹配:`/[slug]`

Next.js动态路由错误:提供的路径`page-name`与页面不匹配:`/[slug]`

互换的青春 2023-03-10 15:12:11
我正在尝试使用[slug].js来呈现与index.jsviagetStaticProps和相邻的页面getStaticPaths。使用动态路由导航到页面后,出现不匹配错误。即使提供的路径实际上与页面 slug 和页面道具内容匹配,也会发生此错误。当index.js复制并重命名为page-name.js(例如about.js)时,页面呈现良好,所以我认为问题在于我如何使用getStaticPaths. 实际上,我并没有完全理解getStaticProps和之间的关系getStaticPaths。是否有一些映射允许引擎在给定地图中的任何路径的情况下查找适当的道具?Index.jsimport Link from 'next/link';import { getPageDataBySlug } from '../lib/api';export default function Page(pageData) {  const page = pageData;  return (    <>      <h1>document title is: {page.documentTitle}</h1>      <Link href="/[slug]" as="/about">        <a>          <h5>Link to About</h5>        </a>      </Link>    </>  );}export async function getStaticProps() {  const props = await getPageDataBySlug('home');  return {    props  };}[slug].jsimport Link from 'next/link';import { getPageDataBySlug, getApiDataPaths } from '../lib/api';export default function Page(pageData) {  const page = pageData;  return (    <>      <h1>document title is: {page.documentTitle}</h1>      <Link href="/" as="/">        <a>          <h5>Link to Home</h5>        </a>      </Link>    </>  );}// Only grab the entry for this pageexport async function getStaticProps({ params }) {  const props = await getPageDataBySlug(params.slug);  return {    props  };}export async function getStaticPaths() {  const apiDataPaths = await getApiDataPaths();  return {    paths: apiDataPaths?.map(({ slug }) => `${slug}`) ?? [],    fallback: false  };}getStaticProps返回正确的页面内容{  "title": "About",  "slug": "about",  "description": "About page description",  "documentTitle": "Pithy Compelling Headline",  "article": {    "content": [[Object], [Object]],  }}getApiDataPaths()回报[  { slug: 'about' },  { slug: 'another-page' },  { slug: 'yet-another' }]地图以数组形式getStaticPaths()返回:paths[  'about',  'another-page',  'yet-another']我在这里错过了什么?应该getStaticPaths只有当前页面的路径吧?FWIW 我正在使用 Contentful 作为 API,并且运行良好。
查看完整描述

1 回答

?
HUH函数

TA贡献1836条经验 获得超4个赞

Next Js Docs帮助找出错误。这是你出错的地方。您以这种格式传递了一组对象:


[{id:1}, {id:2}]

当 getStaticPaths 期待这个时:


[

    { params: { id: '1' } },

    { params: { id: '2' } }

]

解决方案:


  export async function getStaticPaths() {


  const apiDataPaths = await getApiDataPaths();

  // Empty arr to build new paths

  const newPaths = [];

  // Add params to every slug obj returned from api

  for (let slug of apiDataPaths) {

    newPaths.push({ params: { ...slug } });

  }

  // Return paths to render components

  return {

    paths: newPaths,

    fallback: true

  };

}

您还可以考虑清理服务器端的数据。


查看完整回答
反对 回复 2023-03-10
  • 1 回答
  • 0 关注
  • 209 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信