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

如何从API请求的数据中分配对象的值?

龚振濂
2023-03-14

我是一个初学web开发人员,我有与API请求相关的问题。我在一个名为footData的异步函数中发出了一个API请求,该函数将在success变量中返回一个数组(例如,[0,2,4,12,32,...])。然后,我必须将这个数组的值插入对象my data object中。所以,我的数据[0].成功一定是我的成功[0]。问题是我无法从异步函数中获取成功数据。

下面是我的代码:

import { Table } from 'antd'
import React from 'react'

const columns = [
  {
    title: 'POS',
    dataIndex: 'position',
    key: 'position',
    className: 'bg-transparent text-gray-6 thEl',
  },
  {
    title: 'Time',
    dataIndex: 'team',
    key: 'team',
    className: 'bg-transparent text-gray-6 thEl',
  },
  {
    title: 'Pontos',
    dataIndex: 'points',
    key: 'points',
    className: 'bg-transparent text-gray-6 thEl',
  },
  {
    title: 'Jogos',
    dataIndex: 'games',
    key: 'games',
    className: 'bg-transparent text-gray-6 thEl',
  },
  {
    title: 'Vitórias',
    dataIndex: 'wins',
    key: 'wins',
    className: 'bg-transparent text-gray-6 thEl',
  },
  {
    title: 'Empates',
    dataIndex: 'draws',
    key: 'draws',
    className: 'bg-transparent text-gray-6 thEl',
  },
  {
    title: 'Derrotas',
    dataIndex: 'defeats',
    key: 'defeats',
    className: 'bg-transparent text-gray-6 thEl',
  },
  {
    title: 'Gols Pró',
    dataIndex: 'goals',
    key: 'goals',
    className: 'bg-transparent text-gray-6 thEl',
  },
  {
    title: 'Gols Contra',
    dataIndex: 'own_goals',
    key: 'own_goals',
    className: 'bg-transparent text-gray-6 thEl',
  },
  {
    title: 'Saldo de Gols',
    dataIndex: 'goal_balance',
    key: 'goal_balance',
    className: 'bg-transparent text-gray-6 thEl',
  },
  {
    title: 'Aprov. (%)',
    dataIndex: 'success',
    key: 'success',
    className: 'bg-transparent text-gray-6 thEl',
    render: (text) => <span className="font-weight-bold">{text}</span>
  },
  {
    title: 'Recentes',
    dataIndex: 'recent',
    key: 'recent',
    className: 'bg-transparent text-gray-6 thEl',
  },
]

const data = [
  {
    "key": "1",
    "position": "1",
    "success": "+3,125",
    "team": "Flamengo",
    "points": "12",
    "games": "31",
    "wins": "12",
    "draws": "32",
    "defeats": "42",
    "goals": "43",
    "own_goals": "12",
    "goal_balance": "42",
    "recent": "1",
    "progress": { "value": 60, "color": "bg-success" },
  },
  {
    "key": "2",
    "position": "2",
    "success": "+3,125",
    "team": "Fluminense",
    "points": "12",
    "games": "31",
    "wins": "12",
    "draws": "32",
    "defeats": "42",
    "goals": "43",
    "own_goals": "12",
    "goal_balance": "42",
    "recent": "1",
    "progress": { "value": 15, "color": "bg-orange" },
  },
  {
    "key": "3",
    "position": "3",
    "success": "+3,125",
    "team": "Cruzeiro",
    "points": "12",
    "games": "31",
    "wins": "12",
    "draws": "32",
    "defeats": "42",
    "goals": "43",
    "own_goals": "12",
    "goal_balance": "42",
    "recent": "1",
    "progress": { "value": 25, "color": "bg-primary" },
  }
]

const footData = async () => {
  const url = "https://api.api-futebol.com.br/v1/campeonatos/10/fases/55";
  const bearer = 'Bearer live_450d03addcc0af4ab0adf3d67ec6ee';

  const response = await fetch(url, {
    "method": "GET",
    "headers": {
      "Authorization": bearer
    }
  })
  const json = await response.json();
  const fData = json.tabela;
  const success = fData.map(obj => obj.aproveitamento)
  for (let i = 0; i < success.length; i++) {
    console.log(success[i]);
  }
  return {
    success
  }
}

footData(data);

const HistoryTable = () => {
  return (
    <div className="table-responsive text-nowrap historyTable">
      <Table columns={columns} dataSource={data} pagination={false} />
    </div>
  )
}

export default HistoryTable

事先非常感谢。

共有2个答案

慕金林
2023-03-14

当您这样调用组件外部的函数时,您不能重新编写React Dom。然后我放了一些useState,useEffect用法来调用API,并在从API获取数据后重新设计布局

const HistoryTable = () => {
  const [tbData, setTbData] = useState(data)
  useEffect(()=>{
     const newData = await footData(data);
     setTbData(newData.success)
  },[])
  return (
    <div className="table-responsive text-nowrap historyTable">
      <Table columns={columns} dataSource={tbData} pagination={false} />
    </div>
  )
}

export default HistoryTable
卫仲卿
2023-03-14

您可以在中执行操作。则():

 fetch(url, {
    "method": "GET",
    "headers": {
      "Authorization": bearer
    }
  })
  .then(response => response.json())
  .then(data => console.log(data));

您可以将值赋给数组或用它做任何其他事情,而不是记录响应。

.then(data => { arrayForSuccessData = data} )

请参阅有关FETCH的文档。

 类似资料:
  • 我有一个api负责下载excel工作表,我的请求对象包含一些值,基于请求对象,我要获取值请帮助我解决此问题。。? dd($请求) Controller.php

  • 我们正在尝试为现有的java web应用程序创建一个Android应用程序,并尝试访问java JSON数据。 我们对如何将JSON数据发送到请求感到震惊。 我们考虑创建一个java api并作为请求的响应发送。 请提出任何解决方案, 提前谢谢。

  • 我试图找到使用httr包通过R连接Appannie的API的方法(根本没有API连接的经验)。API要求包含来自appannie网站的请求标题引用:注册App Annie帐户并生成API密钥。将此密钥添加到您的请求标头中,如下所示: 授权:持有人“”引用 我写了这样的代码 命令http_status(getdata)显示我"客户端错误:(401)未经授权"有人能帮我吗,我做错了什么?

  • 问题内容: 我现在正在尝试使用Java Cord中的HTTP请求获取JSON对象。 我想知道如何在下面的代码中获取响应或JSON对象。 请告诉我。 (在此程序中,我尝试获取文章“ New York”的Wikipedia类别。) 问题答案:

  • 我想创建一个API,其中请求 即 叫这个兰姆达。 并且我创建了方法(在)并将其关联到lambda。 我尝试过创建模板映射(并尝试过RTFM),但无法看到如何将路径参数映射到主体。 我如何实现这个映射?

  • 问题内容: 尝试将文件上传到服务器,但ImmutableMultiDict对象返回空。 upload.html 烧瓶 这是日志数据 问题答案: 您的版本太旧,无法引起此情况。 当我使用 2.1.1时 ,代码运行正常。 顺便说一句,您不需要。