import { Button, DownloadTrigger } from "@chakra-ui/react"
const data = "The quick brown fox jumps over the lazy dog"
const Demo = () => {
return (
<DownloadTrigger
data={data}
fileName="sample.txt"
mimeType="text/plain"
asChild
>
<Button variant="outline">Download txt</Button>
</DownloadTrigger>
)
}
用法
import { DownloadTrigger } from "@chakra-ui/react"
<DownloadTrigger data="..." fileName="x.png" mimeType="image/png" />
示例
基础
将您想要下载的数据传递给 data
属性,并指定文件的 fileName
和 mimeType
。
import { Button, DownloadTrigger } from "@chakra-ui/react"
const data = "The quick brown fox jumps over the lazy dog"
const Demo = () => {
return (
<DownloadTrigger
data={data}
fileName="sample.txt"
mimeType="text/plain"
asChild
>
<Button variant="outline">Download txt</Button>
</DownloadTrigger>
)
}
下载 SVG
以下是如何下载 SVG 文件的示例。
import { Button, DownloadTrigger } from "@chakra-ui/react"
const data = String.raw`
<svg xmlns="http://www.w3.org/2000/svg" width="100" height="100">
<circle cx="50" cy="50" r="40" stroke="black" stroke-width="3" fill="red"/>
</svg>
`
const Demo = () => {
return (
<DownloadTrigger
data={data}
fileName="sample.svg"
mimeType="image/svg+xml"
asChild
>
<Button variant="outline">Download svg</Button>
</DownloadTrigger>
)
}
Promise
您也可以从返回 Blob
、File
或 string
的 Promise 触发下载。
"use client"
import { Button, DownloadTrigger } from "@chakra-ui/react"
import { LuImageDown } from "react-icons/lu"
const data = async () => {
const res = await fetch("https://picsum.photos/200/300")
return res.blob()
}
const Demo = () => {
return (
<DownloadTrigger
data={data}
fileName="sample.jpg"
mimeType="image/jpeg"
asChild
>
<Button variant="outline">
<LuImageDown /> Download
</Button>
</DownloadTrigger>
)
}
文件大小
将 DownloadTrigger
与 FormatByte
组件组合使用,以人类可读的格式显示文件大小。
import { Button, DownloadTrigger, FormatByte } from "@chakra-ui/react"
import { LuDownload } from "react-icons/lu"
const data = "The quick brown fox jumps over the lazy dog"
const Demo = () => {
return (
<DownloadTrigger
data={data}
fileName="sample.txt"
mimeType="text/plain"
asChild
>
<Button variant="outline">
<LuDownload /> Download (
<FormatByte value={data.length} unitDisplay="narrow" />)
</Button>
</DownloadTrigger>
)
}