首页 > 解决方案 > Next.js 中的 getInitialProps 不会从服务器获取数据

问题描述

我正在关注Next.js 获取数据的教程

但与教程不同,我使用axios. 问题是getInitialProps没有得到我想要的数据。

这是代码:

import axios from "axios";
import Link from "next/link";

const Body = props => (
  <div>
    <h1>Shows</h1>
    <ul>
      {props.data.map(({ show }) => (
        <li key={show.id}>
          <Link as={`/p/${show.id}`} href={`/post?title=${show.title}`}>
            <a>{show.name}</a>
          </Link>
        </li>
      ))}
    </ul>
  </div>
);

Body.getInitialProps = async function() {
  const res = await axios.get("https://api.tvmaze.com/search/shows?q=batman");
  const data = await res.data;
  console.log(`Show data fetched. Count: ${data.length}`);
  return {
    data: data
  };
};

export default Body;

对我来说,代码看起来不错,但错误Unhandled Rejection (TypeError): Cannot read property 'map' of undefined不断发生。

标签: javascriptreactjsaxiosnext.js

解决方案


我已经解决了这个问题。

这是因为我违反了一条简单的规则。

根据next.js 文档,有一条说明说

注意:getInitialProps不能在子组件中使用。仅在pages.

因此,当我在 获取该数据时index.js,它成功地获取了我想要的数据。

以为我可以getInitialProps在任何组件中使用,就像componentDidMount.

那是个问题。


推荐阅读