DEV Community

graciesharma
graciesharma

Posted on

Implementing a QR Code Download Feature in React

In this blog post, I will demonstrate how to implement a QR code download React application. This tutorial assumes that you have a basic understanding of React. It follows the steps involved in building a component named DownloadQR, responsible for orchestrating the download of a QR image file at the user’s click request.



import React, { useState } from "react";

// Constant URL for the QR code image
const qrCodeDownload = "https://yourserver.com/path/to/qr";

const DownloadQR = () => {
  const [error, setError] = useState("");

  const handleDownload = async () => {
    try {
      const response = await fetch(qrCodeDownload);
      const blob = await response.blob();
      const downloadUrl = URL.createObjectURL(blob);
      const a = document.createElement("a");
      a.href = downloadUrl;
      a.download = "AH_Campaign_QRCode.png";
      document.body.appendChild(a);
      a.click();
      a.remove();
      URL.revokeObjectURL(downloadUrl);
    } catch (err) {
      setError("Failed to download QR Code. Please try again.");
    }
  };

  return (
    <>
      {error && <p styles={{ color: "red" }}>{error}</p>}
      <button onClick={handleDownload}>
        Download QR
      </button>
    </>
  );
};

export default DownloadQR;

Enter fullscreen mode Exit fullscreen mode

Key components include the:

useState Hook for Error Handling
We employ useState to handle error messages in the component. When the download fails, we can notify the user of what went wrong.

handleDownload function
This is an event handler for the click event on the download button. Firstly, it tries to obtain the QR code image from a predefined URL (qrCodeDownload). A blob is then generated from the downloaded image. After that, we create a temporary URL for the blob. We make use of URL.createObjectURL to generate a URL for the blob, turning it into a file-like object. Then we create a temporary anchor tag <a>, assign the generated URL to the href attribute, and set the download attribute to the desired file name. Finally, we simulate a click event on the manipulatively created anchor tag and remove the anchor tag from the document.

Error Handling
In the event that the fetch is rejected at any point in the process during the handleDownload function call fails due to some error in the URL or the server is unreachable, an exception will be captured in the catch block, updating the error message in the state.

UI elements
The final component consists of a simple button that the user can click to initiate the download. An error message is shown above the button if an error has been dispatched.

Once you have done that, Test Your Component Your component should be tested to account for the following scenarios, once you have integrated the DownloadQR component into your existing codebase:

  • The QR code is successfully downloaded from the server.
  • The server request fails due to an error in the server or network.
  • The URL pointing to the QR code image is incorrect.

This utility component improves user engagement by providing a download feature that enables direct downloads of QR codes. This functionality can be beneficial on digital marketing platforms where QR codes are used for campaigns or for activities that demand the scanning of QR codes, such as event registrations. Besides, it highlights how one can handle asynchronous operations and errors effectively in web applications using React.

Top comments (0)