javascript - 在 react-csv 中下载 CSV 后调用函数
问题描述
我正在使用react-csv
下载 CSV 文件。它正在根据需要工作。
但是,我想在下载 CSV 文件后调用另一个函数。这可能吗?
到目前为止,这就是我尝试这样做的方式:
{
finalXerodata &&
<CSVLink
data={finalXerodata}
onClick={() => { console.log("Clicked!"); //this doesnt work }}
disabled={(finalXerodata.length < 1)}
headers={xeroColumns}
filename="data.csv"
className="ant-btn ant-btn-primary"
style={{marginLeft: '20px'}}>Download CSV
</CSVLink>
}
https://www.npmjs.com/package/react-csv
官方文档说 onClick 事件可用,但在这种情况下似乎不起作用。
谢谢
解决方案
react-csv
使用 vanilla<a>
标签提供下载链接。下载开始后,它将在后台运行,与文档分开。无法检测下载何时完成。
组件上的onClick
道具CSVLink
将在打开下载对话框窗口之前运行。您仍然可以使用它来触发事件,但您无法确保用户成功下载了文件。
由于某种原因,单击某个CSVLink
组件似乎会劫持浏览器的控制台输出。这种行为可能会让您误以为onClick
如果您使用控制台日志记录该道具将无法正常工作。
关于如何继续,您有两种选择:
1:扩展CSVLink组件
您可以将<a>
标记替换为可以跟踪下载的更智能的下载组件。看来您可以通过仅替换render
方法https://github.com/react-csv/react-csv/blob/master/src/components/Link.js来实现这一点
。这种方法可能会占用大量开发人员的时间。
2:依赖用户输入
您可以使用 检测下载的开始onClick
。然后,当用户再次与应用程序交互时,您可以推断下载已完成(或至少下载对话框已关闭)。
您应该做什么取决于您想要实现的目标以及您希望对用户体验进行多少控制。
推荐阅读
- android - 无法为 AOSIP 构建目标:在system/core/base/cmsg.cpp:36:21 中使用未声明的标识符“PAGE_SIZE”:
- javascript - 如何在 Nestjs 中使用 globalPipse 进行自定义响应
- python - 如果标题已存在于文本文件中,如何替换列表中的项目?
- c# - 我无法从基类 c# 访问变量
- aws-lambda - 如何在 VTL 模板中附加响应标头
- c - 多次将相同的数字添加到C中的空数组
- mysql - 将两个不同表中的两列相乘,并使用触发器将它们设置到另一个表中
- java - Java 从 JsonArray 中获取一个 JSONObject 并设置 json 响应
- python - (Python 3) 我有一些关于 seek() 和 tell() 的问题
- javascript - jquery延迟切换搜索栏