如何向AdminJS.bundle()传自定义Props及实现过滤数据Excel下载
方案二:直接复用AdminJS已获取的过滤后数据
该思路完全可行,能避免重复查询数据库,实现方式如下:
- 获取AdminJS已加载的数据
在list动作的after钩子中,originalResponse.records包含当前页的过滤后数据,可存入状态仓库:
actions: { list: { after: (originalResponse) => { const store = useStore(); store.setState({ filteredRecords: originalResponse.records }); return originalResponse; } }, Download: { actionType: "resource", icon: "Download", component: Adminjs.bundle("../../Components/Download.jsx") } }
- 传递数据到组件并导出Excel
在Download.jsx中读取仓库数据,用xlsx库直接在客户端生成Excel:
import { useStore } from 'adminjs'; import * as XLSX from 'xlsx'; // 需要先安装xlsx依赖 const Download = () => { const { filteredRecords } = useStore().getState(); const handleDownload = () => { // 将数据转换为Excel工作表 const worksheet = XLSX.utils.json_to_sheet(filteredRecords); const workbook = XLSX.utils.book_new(); XLSX.utils.book_append_sheet(workbook, worksheet, "用户数据"); // 导出文件 XLSX.writeFile(workbook, "users.xlsx"); }; return <button onClick={handleDownload}>下载当前页数据</button>; }; export default Download;
注意:此方式仅能导出当前页数据,若需导出所有过滤后的数据,仍需通过过滤参数调用API获取全量数据。
内容的提问来源于stack exchange,提问作者Shahed
相关产品推荐
相关产品推荐

