#typescript #next.js #fetch-api
Вопрос:
Я новичок в Next.js и машинописный текст. Я пытаюсь map()
получить данные из JsonPlaceholder
Мой getStaticProps
:
export const getStaticProps: GetStaticProps = async () => {
const res = await fetch(`https://jsonplaceholder.typicode.com/users`)
const data = await res.json()
return {
props: { auth0Data: data },
}
}
Моя следующая страница:
interface Auth0DataProps {
id: number,
name: string,
username: string,
}
type Props = {
auth0Data: Auth0DataProps
}
const Dashboard: NextPage<{ auth0Data: Props }> = ({ auth0Data }) => {
console.log(auth0Data) // logs the data as an object
return (
<LayoutComponent title="User profile">
{auth0Data.map(data=> ( // I GET AN ERROR
...
)
)
}
Ошибка, которую я получаю:
Свойство «карта» не существует для типа «Реквизит»
Комментарии:
1. Какую ошибку вы получаете?
map
является методом массива, еслиauth0Data
это объект, он не будет работать с ним.2. Данные отображаются в браузере, но в машинописном тексте написано другое:
Property 'map' does not exist on type 'Props'
и данные, которые я получаю, — это данные ie —Parameter 'data' implicitly has an 'any' type.
3. Ах, так это ошибка машинописного текста, которую вы получаете. Это потому, что вы печатаете
auth0Data
неправильно.
Ответ №1:
Если данные, которые вы передаете через auth0Data
prop , являются массивом, то вы вводите Dashboard
компонент неправильно — auth0Data
это должен быть массив Auth0DataProps
, и NextPage
Props
тип должен быть общим.
type Props = {
auth0Data: Auth0DataProps[]
}
const Dashboard: NextPage<Props> = ({ auth0Data }) => {
// Remaining code
}
Комментарии:
1. Данные должны поступать в виде объекта, похожего на массив, поэтому я могу перебирать данные, и они отображаются в браузере, поэтому проблема заключается в моей реализации :
auth0Data.map(data => <p key={data.id}>{data.name}</p>
2. Вы также изменили
Dashboard
тип компонента наNextPage<Props>
? Похоже, вы пропустили это из своего фрагмента.3. да, я сменил реквизит, но все равно получаю тот же снимок экрана
Ответ №2:
Наиболее распространенной ошибкой является неправильная интерпретация полученных вами данных. И, насколько я вижу, вы получаете объект со своего сервера, что означает, что вы не можете использовать array.map()
функцию (MDN).
Typescript не может вам в этом помочь, так как он интерпретирует ваш код не во время выполнения, а во время компиляции. В результате вы должны убедиться, что полученные данные соответствуют указанным типам.