Использование getInitialProps выдает ошибку типа: не удается прочитать свойство ‘map’ неопределенного

#reactjs #next.js

#reactjs #next.js

Вопрос:

Я видел много вопросов, связанных с проблемами с getInitialProps и getStaticProps , но не смог решить свои собственные.

Я просто пытаюсь загрузить некоторые данные json (I console.зарегистрировал его и знаю, что оно не определено) и передаю его моему Main компоненту:

 import Card from "./components/Card";
import data from "../data/data.json";

const Main = ({ cards }) => {
  return (
      <div}>
        {cards.map((card) => {
          <Card key={card.id} card={card} />;
        })}
      </div>

  );
};

Main.getInitialProps = async (context) => {
  return {
    props: { cards: data },
  };
};

export default Main;
  

Ошибка типа: не удается прочитать свойство ‘map’ неопределенного

Я тоже пробовал с getStaticProps , та же проблема.

Что я делаю не так?

Комментарии:

1. Я полагаю, для простоты вы опустили, откуда data берется. Убедитесь, что это действительно массив.

Ответ №1:

Согласно документам, это должно сработать:

 import Card from "./components/Card";
import data from "../data/data.json";

const Main = ({ cards }) => {
  return (
      <div}>
        {cards.map((card) => {
          <Card key={card.id} card={card} />;
        })}
      </div>

  );
};

Main.getInitialProps = async (context) => {
  // await for `data`

  return {
    cards: data,
  };
  // ^-- note the change, you nested your object inside a `props` property
};

export default Main;
  

Ответ №2:

 Page.getInitialProps = async (ctx) => {
  const res = await fetch('https://api.url.com')
  const json = await res.json()
  return { stars: json.stargazers_count }
}
  

вы должны изменить это

 return {
    props: { cards: data },
  };
  

следует использовать это:

 return { cards: data  }
  

подробнее смотрите: docs

Комментарии:

1. Чем ваш ответ отличается от моего, полученного двумя днями ранее?