JGuang

下载触发器

Download Trigger · Chakra UI

交互预览
npm install @chakra-ui/react@3.37.0 @emotion/react@11.14.0

下载触发器

在用户操作后生成文件下载。MIME、扩展名和实际内容必须一致;异步内容生成、预览就绪和文件实际保存是不同结果,隔离预览的权限限制见专属指南。

随附图标许可

源码查看器包含 ICON_ATTRIBUTION.md,以及本组示例实际使用的图标集合原始许可。再分发示例时请保留;react-icons 封装包的许可证不能替代各图标集合自身的条款。

  • Lucide: ISC

通过用户操作生成文件下载。它不是文件上传控件,也不是后端文件存储服务。此页针对 Chakra UI 3.37.0。

安装与使用

完成 setup.zh.md,从 @chakra-ui/react 导入 DownloadTrigger。向 data 提供待下载内容,用 fileName 指定文件名,用 mimeType 指定实际类型。异步 data 可以返回 Blob、File 或字符串。需要按钮外观时使用原生 asChild 与 Chakra Button 组合,避免嵌套两个 button。

最小的本地文本下载:

import { Button, DownloadTrigger } from "@chakra-ui/react"

export function Example() {
  return (
    <DownloadTrigger data="JGuang demo" fileName="demo.txt" mimeType="text/plain" asChild>
      <Button>下载文本</Button>
    </DownloadTrigger>
  )
}

本地清单保留基础、SVG、Promise、文件大小共 4 个原生示例;文件大小展示使用原生 FormatByte。文件扩展名和 MIME 必须与内容一致,不能仅修改名称假装完成格式转换。

预览限制与真实失败

download-trigger-with-promise 原始 data 函数使用 fetch 请求公开图片。JGuang 的 connect-src 策略会阻止它;按钮点击后允许展示真实失败,并可重试预览。重试不会解除限制,也不能将预览重新就绪说成文件下载成功。

另外,隔离 iframe 的 sandbox 未授予 allow-downloads,即使是本地 data 示例,浏览器也可能拒绝实际保存文件。这是展示环境限制,不是组件没有下载能力。要验证保存结果,应在自己的顶层应用页面点击,检查实际文件内容、文件名和类型;不要为了演示而全局关闭浏览器安全保护。

生产异步下载需要权限检查、HTTP 状态验证、超时/取消、失败提示和重复点击管理。Blob 生成成功不保证浏览器已保存到磁盘,网站不应声称能够读取用户实际保存位置。不要自动触发下载。

可访问性与来源

为按钮提供可理解的动作名称,保留键盘激活和焦点。在深浅色与窄屏检查长文件名是否溢出。

原始示例和 MDX 固定在提交 2e7517745cff2fcde0b8012f136cf99611ff262a,保存在 vendor;此页为 JGuang 编写。原始 Download Trigger MDX 的 Props 区引用了 Button 表,不应将它误当成完整下载 API;以固定版本类型声明和原生源码为准。

安装与初始化

npm install @chakra-ui/react@3.37.0 @emotion/react@11.14.0

渲染前配置 ChakraProvider、defaultSystem 和 Emotion。保留宿主项目的 React 版本并检查 peer 兼容。官方 npm 安装提供组件包,不会复制以下示例源码。locale、next-themes 和框架专属 SSR 配置见资源安装指南;npm 安装之外还需单独复制所选示例源码。

完整原生使用示例

这是固定版本的真实示例,不是通用 API 伪代码。复制完整源码依赖并保留命名导出;附加依赖逐例列在下方。

import { Button, DownloadTrigger } from "@chakra-ui/react"

const data = "The quick brown fox jumps over the lazy dog"

export const DownloadTriggerBasic = () => {
  return (
    <DownloadTrigger
      data={data}
      fileName="sample.txt"
      mimeType="text/plain"
      asChild
    >
      <Button variant="outline">Download txt</Button>
    </DownloadTrigger>
  )
}

全部示例与复现要求

示例名称用于选择演示,不是组件通用 variant 属性。复制所选示例全部 sourceFiles;compositions 别名表示本地文件,不是 npm 包。保留相对导入或映射到宿主真实目录。React peer 单独检查;编辑器示例保留一致的固定 Tiptap 扩展版本。

基础用法

download-trigger-basic · 命名导出 DownloadTriggerBasic · 上游原始示例

npm install @chakra-ui/react@3.37.0 @emotion/react@11.14.0
  • vendor/apps/compositions/src/examples/download-trigger-basic.tsx

SVG

download-trigger-svg · 命名导出 DownloadTriggerSvg · 上游原始示例

npm install @chakra-ui/react@3.37.0 @emotion/react@11.14.0
  • vendor/apps/compositions/src/examples/download-trigger-svg.tsx

异步文件内容

download-trigger-with-promise · 命名导出 DownloadTriggerWithPromise · 上游原始示例

npm install @chakra-ui/react@3.37.0 @emotion/react@11.14.0 react-icons@5.6.0
  • vendor/apps/compositions/src/examples/download-trigger-with-promise.tsx

文件尺寸

download-trigger-with-file-size · 命名导出 DownloadTriggerWithFileSize · 上游原始示例

npm install @chakra-ui/react@3.37.0 @emotion/react@11.14.0 react-icons@5.6.0
  • vendor/apps/compositions/src/examples/download-trigger-with-file-size.tsx

原生 API 与源码参考

源码查看器保留原始声明、import 与继承关系。Ark UI 事件契约、Chakra 样式属性和 recipe 类型仍以原生包为准;本指南不平铺或编造默认值。代码注释保留原文,不冒充正文翻译。

  • npm/@chakra-ui/react@3.37.0/dist/types/components/download-trigger/index.d.ts

状态与安装后检查

执行严格类型检查、目标项目生产构建和实际操作。检查名称/焦点/键盘、深浅色、窄屏、原生支持的空/加载/错误状态以及卸载清理。预览限制远程接口、上传与下载,业务服务需自行配置。复制命令或预览就绪不代表安装完成或后端成功。

来源与许可边界

https://github.com/chakra-ui/chakra-ui/tree/2e7517745cff2fcde0b8012f136cf99611ff262a

本页是 JGuang 双语实用说明,不声称全文翻译上游 MDX。原始文档与示例字节保留在 vendor。保留仓库 MIT、compositions 的 ISC 元数据和独立依赖声明;原始许可元数据差异与缺失完整声明仍作为显式审查事项,不包含 Chakra Pro 付费内容。