当前位置: 首页 > 知识库问答 >
问题:

在React中迭代JSON对象

融伯寅
2023-03-14

我目前正在努力迭代从第三方API获取的JSON对象。您可能会看到,以前没有真正处理过获取API。

这是我正在获取的JSON文件:
链接到JSON文件

为了获取数据,我使用一个useFetch脚本,它看起来像这样:

// useFetch.js

import { useState, useEffect } from "react";
import fetch from 'isomorphic-unfetch';

function useFetch(url) {

    const [data, setData] = useState([]);
    const [loading, setLoading] = useState(true);

    async function fetchUrl() {
        const res = await fetch(url);
        const json = await res.json();
        setData(json);
        setLoading(false);
    }

    useEffect(() => {
        fetchUrl();
    }, []);

    return [data, loading];
}

export { useFetch };

我稍后尝试导出的只是每个角色/冠军的名称(他本身就是一个对象,包括名称、描述等)

// App.js

import { useState, useEffect } from 'react';
import { useFetch } from "../components/useFetch";

const App = () => {
    const [data, loading] = useFetch(
        "https://ddragon.leagueoflegends.com/cdn/9.3.1/data/en_US/champion.json"
    );

    useEffect(() => {
        console.log(data)
    })

    return (
        <div>
           <ul>
              {Object.keys(data.data).map((item, i) => (
                  <li key={i}> // every character has got an ID as well I'd like to pass here later. The output is just a dummy rn.
                      <p>{data.data}</p>
                  </li>
              ))}
           </ul>
        </div>
    )
}

export default App;

不幸的是,我在尝试转换JSON对象数据时遇到了一个错误。data表示:

类型错误:无法将未定义或null转换为指向我在JSX中的迭代的对象。

我尝试的是针对那些空洞的规则,给它们一个字符串,结果是这样的

if ((typeof Object === null) || (typeof Object === undefined)) { 
  return '-' 
}

if ((item === null) || (item === undefined)) { 
  return '-' 
}

如前所述

但这显然没有帮助。

我将感谢任何提示/优化与此。


共有1个答案

林德惠
2023-03-14

我不太想对钩子做出反应,但您将数据设置为[],因此数据。在实际获取数据之前,数据将是未定义的。

如果在useFetch中设置const[data, setData]=useState({data: [] });,它会工作吗?

 类似资料:
  • 问题内容: 我从网络服务器获取以下JSON字符串。 我想要公开HTML中的JSON,我尝试了以下操作,但未填写字段,我也收到了“无异常”,因此我很难找出其不起作用的原因。 TS 的HTML 问题答案: 您可以使用来从对象获取键(需要IE AFAIK中的polyfill)

  • 我有一个要迭代通过的JSON对象。 我正在使用映射这些值,我认为这是处理对象的正确方法: 但是,当我希望对象返回时,上面的返回以下内容: 为什么它返回的是值,而不是对象?

  • 问题内容: 我在尝试解决JQuery $ .each()迭代时遇到一些真正的困难 这是我的数组,为方便起见,限制了结果 我的第一个$ .each迭代效果很好,但是“ EVENTS”的子迭代是我遇到问题的地方 我的第一个$ .each()函数 我无法使用的第二个$ .each()函数 我在(松散地)理解这不是单个JSON对象,而是对象的JSON数组,但不了解第一个版本是否有效,第二个版本为什么不起作

  • null 一些示例输出数据: *编辑:工作的scala代码行:

  • 问题内容: 我的问题很简单,我有一个以下JSON Typescript对象,并且我想迭代遍历JSON属性 使用的代码是以下有角TypeScript组件: 我真正需要的是遍历JSON的键值属性,并在我的HTML中显示它们。 非常感谢! 问题答案: 如果您使用的是Angular 6.1,请使用键值管道 对于Angular 5 示例:https://stackblitz.com/edit/keyvalu

  • 问题内容: 如何在jquery中迭代json数据。 问题答案: 您可以这样使用: