繁体   English   中英

如何显示来自返回对象而不是数组的 api 调用的数据

[英]How to display data from an api call that returns an object instead of an array

http://ddragon.leagueoflegends.com/cdn/10.16.1/data/en_US/champion.json

这是我试图使用的 api。 出于某种原因,当我去映射它以从中提取数据并显示数据时,它说 Champions.map 不是一个函数。 (我猜它这么说是因为我无法使用 .map 迭代对象。所以我尝试使用 Object.keys(champions) 但我仍然无法真正让它做我想要它做的事情。

我觉得我错过了一些非常简单的东西,因为我已经有一段时间没有进行任何 api 调用了。

这是我的代码。

import React, { useState, useEffect } from 'react';
import axios from 'axios';
import ChampionContainer from "./ChampionContainer";
// import { Link } from 'react-router-dom';


const ChampionList = () => {
    const [ champions, setChampions ] = useState([])
    console.log("This is our state",champions)

    useEffect(() => {
            const url = "http://ddragon.leagueoflegends.com/cdn/10.16.1/data/en_US/champion.json";
            axios.get(url)
            .then(response => {
                setChampions(response.data.data);
            })
            .catch(error => {
                console.log("server Error", error)
            })
    }, [champions]);




    return (
        // Object.keys(a).map(function(keyName, keyIndex) {
        //     // use keyName to get current key's name
        //     // and a[keyName] to get its value
        //   })
        <div>
            {Object.keys(champions).map((key) => {
                return (<div key={key}>{champions[key]}</div>)
            })}
            {/* {champions.map((champion) => (
                <ChampionContainer key={champion.id} champion={champion}/>
            ))} */}
        </div>

    );
}


export default ChampionList;

在此先感谢您的帮助。

你是对的,你第一次尝试在champions上做.map()是行不通的,因为它不是一个数组,它是一个对象。

你的第二次尝试更接近,但当你这样做时 -

champions[key]

这将返回您的champion对象之一。 您只需要从该对象访问您想要的属性,例如

Aatrox champions[key].name - 获得champion的名字,例如Aatrox

你有一个无限循环。 在 useEffect 中将 Champions 作为参数传递,当它改变时你执行 useEffect,但在那里你 setChampions,然后 Champions 改变了 useEffect 再次运行。 结果无限循环。

您调试程序以确保 respomse.data.data 包含您需要的信息?

在 setChampions 函数中最好使用 setChampions(current => current + newData); 这是一个对象,因此您应该使用扩展运算符来映射到一个新对象。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM