为什么 NextJS 中查询参数未定义?

Dan*_*ein 10 javascript reactjs next.js

我正在使用 Router(Page) 调用页面,并期望该页面的变量(该页面称为 [category].js)出现在初始页面加载时。查询本身在那里,键在那里,但值是“未定义”。服务器端似乎有一些对 getInitialProps 的调用,其中 2/3 未定义。

React组件有构造函数等,它不是函数式组件。

这是我当前的 getInitialProps:

Category.getInitialProps = async ({ req, query }) => {
  let authUser = req && req.session && req.session.authUser
  let categoryData = {}
  let categoryItemData = {}
  let category = query.category
  if(category){
    let res = await fetch(url1,
    {
        method: 'POST',
        credentials: 'include',
    })
    categoryData = await res.json();
    let categoryItemsRes =  await fetch(url2, 
        {
            method: 'POST',
            credentials: 'include',
        })
    categoryItemData = await categoryItemsRes.json();
  }

  return { query, authUser, categoryData, categoryItemData }
}
Run Code Online (Sandbox Code Playgroud)

Val*_*man 5

在这一点上这可能是多余的,但我也遇到了这个问题并发现文档在这里解释了这一点

在预渲染期间,路由器的查询对象将为空,因为我们在此阶段没有要提供的查询信息。水合后,Next.js 将触发应用程序更新,以在查询对象中提供路由参数。

你可以尝试这个:

export async function getServerSideProps(ctx) {
  const { id } = ctx.query;
  return {
    props: {
      id,
    },
  };
}
Run Code Online (Sandbox Code Playgroud)

这样它就可以在渲染服务器端时获取查询参数,因此它们可以立即可用。

  • ^ 很好的答案。以下链接的第一行显示“如果从页面导出名为 getServerSideProps 的异步函数,Next.js 将使用 getServerSideProps 返回的数据在每个请求上预渲染此页面。” 因此本质上,NextJS 只需将其放在页面上即可自动检测该功能。https://nextjs.org/docs/basic-features/data-fetching#getserversideprops-server-side-rendering (2认同)