【问题标题】:undefined PATHS in getStaticPaths Next JSgetStaticPaths Next JS 中未定义的路径
【发布时间】:2021-04-06 01:12:53
【问题描述】:

我正在尝试执行getStaticPaths 和getStaticProps,但我总是收到一个错误,即paths 在getStaticPaths 中未定义。下一个版本目前在10.0.3。

这是错误信息

Error: Invalid value returned from getStaticPaths in /properties/[id]. Received undefined Expected: { paths: [], fallback: boolean }

这是我的代码

export async function getStaticPaths() {
  try {
    const properties = await api.get('/properties', {
      headers: generateAuthHeaders(null, 'application/json', API_TOKEN)
    })

    const paths = properties.res.data.propertyDetails.map(value => {
      return {
        params: { id: value.id }
      }
    })

    return { paths, fallback: false }
  } catch (er) {
    //  do nothing
  }
}

export async function getStaticProps({ params }) {
  try {
    const properties = await api.get(`/properties/${params.id}`, {
      headers: generateAuthHeaders(null, 'application/json', API_TOKEN)
    })

    return {
      props: {
        propertyDetails: JSON.parse(JSON.stringify(properties.data.properties))
      }
    }
  } catch (er) {
    return {
      props: { propertyDetails: false }
    }
  }
}

【问题讨论】:

    标签: reactjs next.js vercel


    【解决方案1】:

    我看代码的猜测是getStaticPaths中的catch块正在被输入,并且由于它没有return语句,函数结束并默认返回undefined。

    所以你需要返回一些东西,像这样......

    export async function getStaticPaths() {
      try {
        const properties = await api.get('/properties', {
          headers: generateAuthHeaders(null, 'application/json', API_TOKEN)
        })
    
        const paths = properties.res.data.propertyDetails.map(value => {
          return {
            params: { id: value.id }
          }
        })
    
        return { paths, fallback: false }
      } catch (er) {
        console.error(er)
        return { paths: [], fallback: false } // <- ADDED RETURN STMNT
      }
    }
    

    我不熟悉getStaticPaths API,因此您可能需要为paths 返回something(不是空数组)。因此,这段代码可能无法正常工作,但我只是指出您需要以您收到的错误消息中指定的形式返回一个对象。

    【讨论】:

    • 感谢您的回答,虽然它仍然无法正常工作:((
    • @yabbear 控制台打印出什么错误?
    • 这实际上是我面临的挑战之一,据我所知,不允许在控制台上打印输出,这与它的功能有关。但是我所做的尝试是删除 try catch 并且使用return { paths: [{ params: { id: 'abc' } }], fallback: false } 它正在工作,我认为我需要做的是将我的paths 模式化为我所做的相同静态数据,但我不确定应该如何完成有多个id
    猜你喜欢
    • 1970-01-01
    • 2021-08-24
    • 1970-01-01
    • 2019-11-14
    • 1970-01-01
    • 2021-04-25
    • 2021-01-10
    • 2021-11-21
    • 2022-10-24
    相关资源
    最近更新 更多