reactjs - React - 将数据从外部 API 传递到 CSV 文件
问题描述
我正在尝试从外部 api 传递数据并将其转换为 CSV 文件。这是我到目前为止所拥有的:
import React, { Component } from 'react';
import { CSVLink } from "react-csv";
import Header from './components/header'
import './App.scss'
class App extends Component {
constructor() {
super()
this.state = {
orders: []
}
this.getReports = this.getReports.bind(this)
}
getReports = async () => {
const response = await fetch('example.com')
const ordersData = await response.json()
this.setState({
orders: ordersData.data,
})
let order = this.state.orders.map(order => ({
ID: order.id,
Order_ID: order.order_id,
Date: order.created,
Amount: order.total_amount,
Payment_Provider: order.payments[0].provider_id,
Payment_ID: order.payments[0].id,
Refund_Reason: order.reason
}))
const objectToCsv = (order) => {
const csvRows = [];
const headers = Object.keys(order[0])
csvRows.push(headers.join(','));
// console.log(csvRows)
for (const row of order) {
const values = headers.map(header => {
const escaped = ('' + row[header]).replace(/"/g, '\\"')
return `"${escaped}"`
})
csvRows.push(values.join(','))
}
return csvRows.join('\n')
}
let csvData = objectToCsv(order)
console.log(csvData)
// console.log(order)
// console.log(this.state.orders)
}
render() {
return (
<div className="App">
<Header />
<div className="body">
{/* <button onClick={this.getReports}>CLICK</button> */}
<CSVLink data={csvData} onClick={this.getReports}>Click me</CSVLink>
</div>
</div>
);
}
}
export default App;
我面临的问题是我无法将 csvData 变量传递给 CsvLink 组件中的数据属性,因为该变量不是全局变量。我尝试添加另一个 csvData 状态,其中我传递了 objectToCsv(order) 并停止了错误,但是当我下载 CSV 时,内容是乱码。任何帮助深表感谢!
解决方案
我已将以下内容添加到我的 getReports 函数并删除了 csvLink 组件,并且我能够将数据导出到 CSV 文件,但这绝对不是一个好的用户体验。我仍然需要努力将输入分成列。
const blob = new Blob([csvData], { type: 'text/csv' })
const url = window.URL.createObjectURL(blob)
const a = document.createElement('a')
a.setAttribute('hidden', '')
a.setAttribute('href', url)
a.setAttribute('download', 'download.csv')
document.body.appendChild(a)
a.click()
推荐阅读
- file-upload - 如何使用 webdriverIO 上传多个文件?
- css - 是否有 NPM 模块或 WebPack 插件可以返回应用程序中使用的所有 CSS 规则?
- algorithm - 使用 maxflow 在强连通图上查找边连通性
- django - 将表格输出到模板
- java - 无法在线订阅 SharePoint 的 Web 挂钩
- excel - Apache POI 从 3.9 升级到 5.0
- python - ode当“func返回的数组必须是一维的,但得到ndim=2”时如何解决。发生?
- azure-application-insights - 如何使用 Microsoft Azure Application Insights 跟踪用户的来源?
- postgresql - GORM如何读取别名字段的值
- visual-studio - Visual Studio 2019 Codesnippet 项目名称依赖导入