开发者问题收集

Nextjs getInitialProps query.id 未定义

2021-07-03
1070

我正在尝试从路由 http//localhost:3000/portfolios/helloworld 获取 id,所以 id 是 helloworld。但是我收到一个错误,提示 TypeError:无法解构“query”的属性“id”,因为它未定义。


const PortfolioDetail = ({ query }) => {
  const { id } = query;
  return <h1>I am Details Page with ID: {id}</h1>;
};

PortfolioDetail.getInitialProps = ({ query }) => {
  return { query };
};

export default PortfolioDetail;

我尝试对类组件执行相同的操作,但错误相同。

// class PortfolioDetail extends React.Component {
//   static getInitialProps({ query }) {
//     return { query };
//   }

//   render() {
//     const id = this.props.query.id;
//     return <h1>I am Detail Page with id : {id} </h1>;
//   }
// }

// export default PortfolioDetail;

这是我的项目结构,您可以在下图中看到

这是我的项目结构

它只有效,我可以使用下面显示的 useRouter 获取我的 id。

import { useRouter } from 'next/router';
import React from 'react';

const PortfolioDetail = () => {
  const router = useRouter();
  const id = router.query.id 
  return <h1>I am Details Page with ID: {id}</h1>;
};

PortfolioDetail.getInitialProps = ({ query }) => {
  return { query };
};

export default PortfolioDetail;

我被困在这一点上,我真的想知道为什么它不起作用。

2个回答

我明白了,你的 _app 中有一个错误:


import '../styles/index.scss';
import 'bootstrap/dist/css/bootstrap.min.css';

// Don't need to spread pageProps here
const MyApp = ({ Component, ...pageProps }) => {
  return <Component {...pageProps} />;
};

export default MyApp;

它应该是:

const MyApp = ({ Component, pageProps }) => {
  return <Component {...pageProps} />;
};
Danila
2021-07-04

为什么不像下面的代码那样使用它

  export default function FirstPost({ id }) {
    console.log("-->", id);
    return (
      <>
        {id}sdlfdfdlkj
      </>
    );
  }

  FirstPost.getInitialProps = ({ query }) => {
    return { id: query?.id };
  };
vivek sharmapoudel
2021-07-04