React实现 Excel 文件导出与在线预览

引言

React 18 的发布带来了一系列全新的特性和改进,其中包括对并发渲染、状态管理等方面的增强。在这篇文章中,我们将利用 React 18 的强大功能,演示如何使用 React 18 编写 Excel 文件的导出与在线预览功能。

第一部分:Excel 文件导出

1. 安装依赖

首先,确保你的项目已经升级到 React 18,并安装最新版本的 xlsx 库。

bash 复制代码
npm install [email protected] react@18 react-dom@18 --save

2. 创建导出组件

创建一个名为 ExcelExport 的组件,并利用 react/jsx-concurrent-mode 特性实现并发渲染。

jsx 复制代码
import React, { unstable_ConcurrentMode as ConcurrentMode } from 'react';
import * as XLSX from 'xlsx';

const ExcelExport = () => {
  const exportToExcel = () => {
    const data = [
      ['姓名', '年龄'],
      ['Alice', 25],
      ['Bob', 30],
      ['Charlie', 22],
    ];

    const ws = XLSX.utils.aoa_to_sheet(data);
    const wb = XLSX.utils.book_new();
    XLSX.utils.book_append_sheet(wb, ws, 'Sheet1');

    XLSX.writeFile(wb, 'exported_data.xlsx');
  };

  return (
    <ConcurrentMode>
      <div>
        <button onClick={exportToExcel}>导出Excel</button>
      </div>
    </ConcurrentMode>
  );
};

export default ExcelExport;

3. 实现导出逻辑

exportToExcel 方法中,我们依然使用 xlsx 库创建工作簿并导出文件,与 React 18 的并发渲染特性无缝集成。

第二部分:在线预览 Excel 文件

1. 安装依赖

为了实现在线预览,我们依然使用 react-excel-renderer 库。

bash 复制代码
npm install react-excel-renderer --save

2. 创建预览组件

创建一个名为 ExcelPreview 的组件,并利用 React 18 的 Concurrent Mode 实现并发渲染。

jsx 复制代码
import React, { useState } from 'react';
import ReactDataSheet from 'react-datasheet';
import 'react-datasheet/lib/react-datasheet.css';
import { OutTable, ExcelRenderer } from 'react-excel-renderer';

const ExcelPreview = () => {
  const [dataLoaded, setDataLoaded] = useState(false);
  const [rows, setRows] = useState([]);
  const [cols, setCols] = useState([]);

  const fileHandler = (event) => {
    let fileObj = event.target.files[0];

    ExcelRenderer(fileObj, (err, resp) => {
      if (err) {
        console.log(err);
      } else {
        setDataLoaded(true);
        setCols(resp.cols);
        setRows(resp.rows);
      }
    });
  };

  return (
    <ConcurrentMode>
      <div>
        <input
          type="file"
          onChange={(event) => fileHandler(event)}
          style={{ padding: '10px' }}
        />
        {dataLoaded && (
          <ReactDataSheet
            data={rows}
            valueRenderer={(cell) => cell.value}
            sheetRenderer={(props) => <OutTable {...props} />}
          />
        )}
      </div>
    </ConcurrentMode>
  );
};

export default ExcelPreview;

3. 文件上传与在线预览

fileHandler 方法中,我们仍然使用 react-excel-renderer 从上传的Excel文件中提取数据,并将其渲染到 ReactDataSheet 中。这里也充分利用了 React 18 的 Concurrent Mode 特性,提升了渲染性能。

结语

通过这篇文章,我们学习了如何在 React 18 中实现 Excel 文件的导出和在线预览。React 18 带来的并发渲染特性能够更好地处理大规模数据,提高了性能和用户体验。希望这份指南帮助你更好地利用 React 18 的新特性,完成一些常见的前端任务。

相关推荐
10年前端老司机1 小时前
什么!纯前端也能识别图片中的文案、还支持100多个国家的语言
前端·javascript·vue.js
摸鱼仙人~1 小时前
React 性能优化实战指南:从理论到实践的完整攻略
前端·react.js·性能优化
程序员阿超的博客2 小时前
React动态渲染:如何用map循环渲染一个列表(List)
前端·react.js·前端框架
magic 2452 小时前
模拟 AJAX 提交 form 表单及请求头设置详解
前端·javascript·ajax
小小小小宇6 小时前
前端 Service Worker
前端
只喜欢赚钱的棉花没有糖7 小时前
http的缓存问题
前端·javascript·http
小小小小宇7 小时前
请求竞态问题统一封装
前端
loriloy7 小时前
前端资源帖
前端
源码超级联盟7 小时前
display的block和inline-block有什么区别
前端
GISer_Jing7 小时前
前端构建工具(Webpack\Vite\esbuild\Rspack)拆包能力深度解析
前端·webpack·node.js