Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

305
Visualizações
Reaccionar: crear una tabla que use datos de una solicitud Http GET

He estado luchando un poco con esta biblioteca y javascript. Así que este es el trato, quiero crear una tabla a partir de los datos que estoy recopilando de una solicitud Http Get. Estoy bien para obtener los datos, pero no puedo trabajar con los datos. Dice que es una matriz vacía.

Aquí está el código:

 import React, { useEffect, useState } from "react"; import axios from "axios"; import { DataGrid } from "@material-ui/data-grid"; function ServersTable() { const [loadingData, setLoadingData] = useState(true); const [serverData, setServerData] = useState([]); const [rows, setRows] = useState([]); const columns = [ { field: "hostname", headerName: "Hostname", width: 70 }, { field: "memory", headerName: "Memória", width: 70 }, { field: "vCpus", headerName: "vCPUs", width: 70 }, { field: "disk", headerName: "Disco", width: 70 }, { field: "ip", headerName: "IP", width: 70 }, ]; useEffect(() => { async function getData() { await axios .get("http://localhost:3333/servers") .then((response) => { setServerData(response.data); fillRows(); setLoadingData(false); }) } if (loadingData) { getData(); } }, []); function fillRows() { let rowArray = []; for (let count = 0; count < serverData.length; count++) { let row; row = { id: count, hostname: serverData[count].hostname, memory: serverData[count].configuracao.memoryProvisioned + " GB", vCpus: serverData[count].configuracao.cpuProvisioned + " vCPUs", disk: serverData[count].configuracao.totalDiskGB + " GB", ip: serverData[count].ip, }; rowArray.push(row); } setRows(rowArray); } return ( <> {loadingData ? ( <p>Loading Please Wait...</p> ) : ( <DataGrid rows={rows} columns={columns} checkboxSelection /> )} {console.log("Server Data:")} {console.log(serverData)} {console.log("Rows:")} {console.log(rows)} </> ); } export default ServersTable;

Creo que me cuesta entender cómo funciona el asíncrono y trato de acceder a los datos antes de que estén listos. Aunque intenté todo para que funcionara y esperé a que los datos estuvieran listos.

¿Alguien podría ayudarme?

about 4 years ago · Juan Pablo Isaza
2 Respostas
Responde à pergunta

0

Esto se debe a la naturaleza asíncrona de setState. El uso de Callback puede ayudar en su caso. Acabo de editar su función getData.

 async function getData() { await axios .get("http://localhost:3333/servers") .then((response) => { setServerData(response.data, () => { fillRows(); setLoadingData(false); }); }) }
about 4 years ago · Juan Pablo Isaza Relatório

0

El problema aquí es que el gancho setState no actualiza sincrónicamente. este tema para obtener más información.

Entonces, esta declaración:

 setServerData(response.data);

no cambie inmediatamente su serverData , por lo tanto, en su función fillRows() serverData se considera una matriz vacía ya que la definió como una matriz vacía en el inicializador setState .

(ya que hay muchas soluciones para resolver este problema) Puede pasar response.data a la función fillRows (en lugar de obtener datos del serverData del estado) como 👉 fillRows(response.data) .

Entonces, cambie su función fillRows a

 function fillRows(responseData) { let rowArray = []; for (let count = 0; count < responseData.length; count++) { let row; row = { id: count, hostname: responseData[count].hostname, memory: responseData[count].configuracao.memoryProvisioned + " GB", vCpus: responseData[count].configuracao.cpuProvisioned + " vCPUs", disk: responseData[count].configuracao.totalDiskGB + " GB", ip: responseData[count].ip, }; rowArray.push(row); } setRows(rowArray); }
about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda