.map не является функцией при извлечении данных из API reactjs

0

Вопрос

Я использую API для извлечения данных. Когда я утешаю.регистрируйте мои данные, они отображаются в виде массива. Но когда я пытаюсь нанести его на карту, чтобы отобразить данные, он говорит мне, что .map - это не функция. Я создал пользовательский хук useFetch, а затем импортирую его в отдельный компонент. Вот мой код и скриншот консоли.log:

useFetch.js

import { useEffect, useState } from 'react'

function useFetch(url) {
    const [data, setData] = useState(null)
    const [isLoading, setIsLoading] = useState(true)
    const [error, setError] = useState(null)

    useEffect(() => {
        fetch(url)
            .then(response => {
                if (!response.ok) {
                    throw Error("Sorry, couldn't fetch data for this resource!")
                }
                return response.json()
            })
            .then(responseData => {
                setData(responseData)
                setIsLoading(false)
                setError(null)
            })
            .catch(error => {
                setIsLoading(false)
                setError(error.message)
            })
    }, [url])

    return { data, isLoading, error }
}

export default useFetch

List.js

import React from 'react'
import useFetch from './useFetch'

function PrizeList2017() {
    const { data } = useFetch('http://api.nobelprize.org/v1/prize.json?year=2017&yearTo=2017')

    return (
        <div className="prize-list-2017-container">
            <h1>2017</h1>
            {data.map(prize => (
                <div key={prize.id}>
                    <h2>{prize.category}</h2>
                </div>
            ))}
            {console.log(data)}
        </div>
    )
}

export default PrizeList2017

консоль.журнал

приставка.изображение информации о журнале

Мы очень ценим вашу помощь!

api arrays javascript map-function
2021-11-23 19:55:22
1

Лучший ответ

1

Эти данные отсутствуют да, когда вы пытаетесь сделать карту, так что сделайте:

  {data && data.prizes && data.prizes.map(prize => (
2021-11-23 20:25:42

Всем привет! Да, я уже пробовал это и все еще получал ту же ошибку.
cjb

я не видел журнал консоли, данные на самом деле являются объектом и данными.в массиве
Konflex

Ладно, я так и думал, но консоль.журнал говорил: массив! Я все еще не уверен в том, как извлечь данные из объекта!
cjb

Попробуйте сопоставить данные.призы, так и должно быть, я отредактировал свое сообщение
Konflex

О, спасибо вам огромное, это сработало! Спасатель жизни!!!
cjb

Это связано с тем, что вы изначально определяете данные как нулевые, поэтому они не могут получить доступ к данным.поэтому, когда они равны нулю, вам нужно проверить, что данные не являются нулевыми, чтобы выполнить сопоставление
Konflex

Почему это не сработало бы только с {data && data.prizes.map(приз => (? Просто хочу по-настоящему понять, почему добавление data.prizes в середине сработало!
cjb

Я действительно ценю всю вашу помощь, большое вам спасибо!
cjb

На других языках

Эта страница на других языках

Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................