当前位置:首页 > React

react实现导出数据

2026-01-26 20:23:40React

使用react-csv库导出数据

react-csv是一个专门为React设计的CSV导出库,安装简单且使用方便。

安装react-csv:

npm install react-csv

基本用法示例:

import { CSVLink } from 'react-csv';

const data = [
  { name: 'John', age: 25 },
  { name: 'Jane', age: 30 }
];

function ExportButton() {
  return (
    <CSVLink data={data} filename={"user-data.csv"}>
      Export to CSV
    </CSVLink>
  );
}

使用原生JavaScript实现

对于不想引入额外依赖的项目,可以使用原生JavaScript实现CSV导出。

创建导出函数:

function exportToCsv(filename, rows) {
  const processRow = (row) => {
    return Object.values(row).map(val => 
      `"${val !== null && val !== undefined ? String(val).replace(/"/g, '""') : ''}"`
    ).join(',');
  };

  const csvContent = [
    Object.keys(rows[0]).join(','),
    ...rows.map(processRow)
  ].join('\n');

  const blob = new Blob([csvContent], { type: 'text/csv;charset=utf-8;' });
  const link = document.createElement('a');
  link.href = URL.createObjectURL(blob);
  link.download = filename;
  link.click();
}

在组件中使用:

react实现导出数据

function ExportButton() {
  const handleExport = () => {
    const data = [
      { id: 1, name: 'Product A', price: 100 },
      { id: 2, name: 'Product B', price: 200 }
    ];
    exportToCsv('products.csv', data);
  };

  return <button onClick={handleExport}>Export CSV</button>;
}

处理大数据量导出

当需要导出大量数据时,建议使用分块处理以避免内存问题。

分块处理实现:

function exportLargeData(filename, data, chunkSize = 10000) {
  let csvContent = Object.keys(data[0]).join(',') + '\n';
  let currentChunk = 0;

  function processChunk() {
    const start = currentChunk * chunkSize;
    const end = start + chunkSize;
    const chunk = data.slice(start, end);

    if (chunk.length === 0) {
      finalizeExport();
      return;
    }

    csvContent += chunk.map(row => 
      Object.values(row).map(val => 
        `"${val !== null && val !== undefined ? String(val).replace(/"/g, '""') : ''}"`
      ).join(',')
    ).join('\n');

    currentChunk++;
    setTimeout(processChunk, 0);
  }

  function finalizeExport() {
    const blob = new Blob([csvContent], { type: 'text/csv;charset=utf-8;' });
    const link = document.createElement('a');
    link.href = URL.createObjectURL(blob);
    link.download = filename;
    document.body.appendChild(link);
    link.click();
    document.body.removeChild(link);
  }

  processChunk();
}

导出Excel文件

对于需要导出Excel格式的情况,可以使用xlsx库。

react实现导出数据

安装xlsx:

npm install xlsx

使用示例:

import * as XLSX from 'xlsx';

function exportToExcel() {
  const data = [
    { Name: 'John', Age: 25 },
    { Name: 'Jane', Age: 30 }
  ];

  const ws = XLSX.utils.json_to_sheet(data);
  const wb = XLSX.utils.book_new();
  XLSX.utils.book_append_sheet(wb, ws, "Sheet1");
  XLSX.writeFile(wb, "users.xlsx");
}

function ExportButton() {
  return <button onClick={exportToExcel}>Export Excel</button>;
}

处理复杂数据结构

当数据结构包含嵌套对象时,需要先将其展平。

展平函数示例:

function flattenObject(obj, prefix = '') {
  return Object.keys(obj).reduce((acc, k) => {
    const pre = prefix.length ? prefix + '.' : '';
    if (typeof obj[k] === 'object' && obj[k] !== null) {
      Object.assign(acc, flattenObject(obj[k], pre + k));
    } else {
      acc[pre + k] = obj[k];
    }
    return acc;
  }, {});
}

function prepareExportData(data) {
  return data.map(item => flattenObject(item));
}

标签: 数据react
分享给朋友:

相关文章

react如何更新

react如何更新

更新 React 版本的方法 检查当前 React 版本 运行以下命令查看项目中安装的 React 版本: npm list react 更新 React 及相关依赖 通过 npm 或 yarn…

react 如何循环

react 如何循环

循环渲染列表 在React中,循环渲染列表通常使用map方法。map可以遍历数组并返回一个新的React元素数组。 const items = ['Apple', 'Banana', 'Orange…

react路由如何配置

react路由如何配置

React 路由配置方法 安装 React Router 使用 npm 或 yarn 安装 React Router 的 DOM 版本: npm install react-router-dom #…

react如何同步修改

react如何同步修改

同步修改状态的常见方法 在React中同步修改状态通常涉及使用useState或useReducer钩子,结合React的批处理机制确保状态更新的一致性。以下是几种典型场景的解决方案: 直接使用us…

react 如何算精通

react 如何算精通

精通 React 的标准 精通 React 不仅需要掌握基础语法和核心概念,还需具备解决复杂问题、优化性能和架构设计的能力。以下是衡量 React 精通程度的关键维度: 核心概念与机制 组件化开…

react如何实现混入

react如何实现混入

在React中实现混入(Mixin)功能可以通过以下几种方式实现,React官方已不推荐使用传统的React.createClass混入方式,但可通过高阶组件或自定义Hook替代。 高阶组件(HOC…