Skip to content

gigantz/react-downloadfile-hook

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

9 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation



⚛️ React "download file hook"


npm i react-downloadfile-hook


Description

Simple React hook to handle data downloading as a file without any dependencies and with typescript support.

Examples

Download properly through a link

This is a recommended method to handle downloading. You need to provide required fileName, format/mime-type, data properties into the hook.

import { useDownloadFile } from "react-downloadfile-hook";

const { linkProps } = useDownloadFile({
  fileName,
  format: "image/svg+xml",
  data: `<svg><circle cx="50" cy="50" r="40"fill="red" /></svg>`,
});

<a {...linkProps}>Download SVG File</a>;

Download on click

The simplest way to handle downloading. It also named as a "force download a file". It uses old-school method, adding a link into the DOM and click it.

import { useDownloadFile } from "react-downloadfile-hook";

const { downloadFile } = useDownloadFile({
  fileName,
  format: "image/svg+xml",
  data: `<svg><circle cx="50" cy="50" r="40"fill="red" /></svg>`,
});

<Button onClick={downloadFile}>Download SVG File</Button>;

Advanced handling

If your data is not a string type (ArrayBuffer, Uint8Array, etc), you may need to replace the built-in handler. You need provide onCreateBlob callback that returns Blob.

import { useDownloadFile } from "react-downloadfile-hook";

const { downloadFile, linkProps } = useDownloadFile({
  fileName,
  format: "image/svg+xml",
  data: new Uint8Array([1, 2, 3]),
  onCreateBlob: (data: uint8Array, format) => {
    const arrayBuffer = uint8Array.buffer;
    return new Blob([arrayBuffer], { type: format });
  },
});

<a {...linkProps}>Download File</a>;
<Button onClick={downloadFile}>Download File</Button>;

Cheers!

About

React hook to download data as file

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published