Lädt...


🔧 React: Criando um componente que transforma Json para Csv


Nachrichtenbereich: 🔧 Programmierung
🔗 Quelle: dev.to

Recentemente tive que implementar uma feature onde era necessário transformar dados que vinham de uma API (json) para csv, eu vi uma boa lib para fazer isso, react-csv, é uma lib que resolveu o problema, porém quando fui dar uma olhada no github dessa lib, vi que o último commit foi há mais de 2 anos, isso me preocupou um pouco, além disso, tem mais de 100 issues abertas.

Tendo isso em mente resolvi dar uma estudada na lib e percebi que poderia implementar na mão e de forma optimizada, além de que se acontecer algum bug eu mesmo posso resolver o problema em algumas horas.

Dito isso, bora para a implementação que é bem tranquila de ser feita:

import React from "react";

const ExportCSV = ({ data, fileName, children, headers }) => {
  const downloadCSV = () => {
    const csvString = [
      headers,
      ...data.map((item) =>
        headers.map((header) => {
          const value = item[header];
          return typeof value === "string" && value.includes(",")
            ? `"${value}"`
            : value;
        })
      ),
    ]
      .map((row) => row.join(","))
      .join("\n");
    const blob = new Blob([csvString], { type: "text/csv" });
    const url = URL.createObjectURL(blob);
    const link = document.createElement("a");

    link.href = url;
    link.download = fileName || "download.csv";
    document.body.appendChild(link);
    link.click();
    document.body.removeChild(link);
    URL.revokeObjectURL(url);
  };

  return (
    <button onClick={downloadCSV}>
      {children}
    </button>
  );
};

export default ExportCSV;

Vamos para algumas explicações dentro da função downloadCSV recebemos os headers da tabela, também usamos o data que recebe o json a ser convertido e distribuído por cada coluna.

Tive que adicionar esse trecho de código, pois estava gerando um bug quando recebia um valor número que incluia uma vírgula, por exemplo, R$ 10.544,53.

return typeof value === "string" && value.includes(",")
  ? `"${value}"`
  : value;

Esse bug acontecia, pois eu precisava usar o método join para remover as vírgulas e por em cada casa dentro do arquivo csv. Também usei a API nativa Blob para transformar o meu json para csv.

No fim retorno um componente react que recebe quatro propriedades, data: dados da API, headers: cabeçalho do csv, filename: nome do arquivo que tu vai querer usar, children: podendo colocar um componente aqui ou uma simples string.

Para usar esse componente é bem simples:

 <CsvButton data={data} fileName="file-name.csv" headers={headers}>
   <>Export data</>
 </CsvButton>

Bem é isso, espero que tenham gostado e se ajudar deixe compartilhe esse post com mais alguém, e se tem algo para melhorar qualquer feedback é muito bem-vindo, obrigado.

...

🔧 React: Criando um componente que transforma Json para Csv


📈 142.53 Punkte
🔧 Programmierung

🔧 Documentação técnica para iniciantes, parte 1: criando um bom README para o seu projeto


📈 46.18 Punkte
🔧 Programmierung

🔧 [Cypress] Encontrando o valor que não está vísivel dentro do componente ao inspecionar


📈 45.22 Punkte
🔧 Programmierung

📰 Acceso Remoto Seguro: Por que es importante y por que hay que hacerlo bien


📈 42.13 Punkte
📰 IT Security Nachrichten

🔧 Laravel Database: O que é e para que serve


📈 40.59 Punkte
🔧 Programmierung

📰 Tres cosas que hay que hacer bien en la gestión de datos para proyectos de IA generativa


📈 40.59 Punkte
📰 IT Security Nachrichten

🔧 O Que é UX/UI Design e Por Que É Importante para Desenvolvedores


📈 40.59 Punkte
🔧 Programmierung

📰 Tres cosas que los CIO pueden hacer para que la IA genere sostenibilidad


📈 40.59 Punkte
📰 IT Security Nachrichten

🔧 O que são microserviços? Para que servem e quando usar?


📈 40.59 Punkte
🔧 Programmierung

🔧 O que é uma Memória RAM ECC? Para que serve e quando usar?


📈 40.59 Punkte
🔧 Programmierung

🔧 Git para Iniciantes: Tudo o que você precisa saber para começar a usar


📈 39.05 Punkte
🔧 Programmierung

🔧 Cómo Integrar un Componente React en WordPress con Elementor: Mi Experiencia y Solución


📈 37.97 Punkte
🔧 Programmierung

🕵️ Lenovo XClarity Administrator up to 2.4.x CSV CSV File CSV Injection privilege escalation


📈 36.6 Punkte
🕵️ Sicherheitslücken

🔧 Export JSON to CSV: a note on CSV and Unicode


📈 35.33 Punkte
🔧 Programmierung

🔧 UX: Criando Soluções que Conectam Pessoas e Tecnologia


📈 35.22 Punkte
🔧 Programmierung

🔧 O que aprendi criando um simluador simples de radar com HMTL Canvas e JS?


📈 35.22 Punkte
🔧 Programmierung

🔧 O que é o Virtual DOM e por que ele torna o React tão eficiente?


📈 34.88 Punkte
🔧 Programmierung

📰 Xerox transforma su arquitectura empresarial mediante RISE with SAP


📈 33.7 Punkte
📰 IT Security Nachrichten

📰 MediaMarkt transforma su modelo de negocio con el foco puesto en la omnicanalidad


📈 33.7 Punkte
📰 IT Security Nachrichten

🔧 Criando rotas dinâmicas para internacionalização (i18n) com Astro Build


📈 33.68 Punkte
🔧 Programmierung

🔧 Criando componentes para Web #01: Acessibilidade (a11y) na prática com WAI-ARIA


📈 33.68 Punkte
🔧 Programmierung

🔧 Docker para iniciantes: Criando Containers de Bancos de Dados


📈 33.68 Punkte
🔧 Programmierung

🔧 Full-Text-Search: Criando um Back-End de Filtro para o Django Rest-Framework


📈 33.68 Punkte
🔧 Programmierung

🔧 Criando meu próprio Github Actions para a área de AppSec


📈 33.68 Punkte
🔧 Programmierung

🔧 Porque usar o componente Image do NextJs e o conceito CLS e LCP


📈 31.18 Punkte
🔧 Programmierung

🔧 O Que é Design de Código e Por Que Isso Importa


📈 28.08 Punkte
🔧 Programmierung

🔧 GitHub Discussion: O que é isso e pra que serve?


📈 28.08 Punkte
🔧 Programmierung

🔧 Mais do que armazenamento de código: 5 features do GitHub que você não conhece


📈 28.08 Punkte
🔧 Programmierung

🔧 O Gerenciador de Hosts que Você Nunca Soube que Precisava... Até Agora! 😲


📈 28.08 Punkte
🔧 Programmierung

📰 El abecé de la IA generativa: estos son los términos clave que tiene que conocer


📈 28.08 Punkte
📰 IT Security Nachrichten

matomo