DEV Community

Cover image for Build an Image Previewer for your React TypeScript Form: A Step-by-Step Guide
Caleb Crosby Adainoo
Caleb Crosby Adainoo

Posted on

Build an Image Previewer for your React TypeScript Form: A Step-by-Step Guide

In today's digital world, forms play a significant role in our everyday lives, whether it's for user registration or simply collecting data. However, it's not always easy to visualize what information is being submitted, especially when it comes to images. In this tutorial, we'll walk you through the process of building an image previewer for your React TypeScript form. With our step-by-step guide, you'll be able to provide your users with a seamless experience when submitting images. So, let's get started!

Prerequisites:
Before getting started, make sure you have the following prerequisites:

  1. Node.js installed on your machine.
  2. A code editor like VSCode.
  3. Basic knowledge of React and TypeScript.

Step 1: Setting up the React Application

The first step is to set up a new React application

but if you have an existing app, you can ignore this step.

To do this, we can use the Create React App (CRA) tool. Open a terminal and run the following command:

npx create-react-app my-app --template typescript

This command creates a new React application with TypeScript support.

Step 2: Creating the Form Component

Next, we will create a form component that includes an input field for the file upload. In the src folder, create a new file called Form.tsx and add the following code:

import React, { useState } from "react";

const Form = () => {
  const [file, setFile] = useState<File | null>(null);

  const handleFileChange = (event: React.ChangeEvent<HTMLInputElement>) => {
    const fileList = event.target.files;
    if (fileList && fileList.length > 0) {
      setFile(fileList[0]);
    } else {
      setFile(null);
    }
  };

  const handleSubmit = (event: React.FormEvent<HTMLFormElement>) => {
    event.preventDefault();
    console.log(file);
  };

  return (
    <form onSubmit={handleSubmit}>
      <label htmlFor="file-upload">Choose a file:</label>
      <input
        id="file-upload"
        type="file"
        accept="image/*"
        onChange={handleFileChange}
      />
      <button type="submit">Submit</button>
    </form>
  );
};

export default Form;

Enter fullscreen mode Exit fullscreen mode

In this component, we use the useState hook to manage the file state. We also use the onChange event to handle changes to the file input. Finally, we use the onSubmit event to handle form submission.

Step 3: Adding the Image Preview Component

Now, we will add an image preview component that displays a preview of the selected image. In the src folder, create a new file called ImagePreview.tsx and add the following code:

import React from "react";

type ImagePreviewProps = {
  file: File | null;
};

const ImagePreview = ({ file }: ImagePreviewProps) => {
  if (!file) {
    return null;
  }

  return (
    <div>
      <img
        src={URL.createObjectURL(file)}
        alt="Preview"
        // you can modify this styles to match your needs
        style={{ width: "300px", objectFit: "contain" }}
      />
    </div>
  );
};

export default ImagePreview;
Enter fullscreen mode Exit fullscreen mode

In this component, we use the URL.createObjectURL method to create a URL for the selected file. We then use this URL as the src attribute of the img tag.

Step 4: Updating the Form Component

Now that we have created the ImagePreview component, we need to update our Form component to display it. First, import the ImagePreview component at the top of the Form.tsx file.

Next, we can simply add the ImagePreview component below the file input element in the return statement of the Form component:

import React, { useState } from "react";
import ImagePreview from "./ImagePreview";

const Form = () => {
  const [file, setFile] = useState<File | null>(null);

  const handleFileChange = (event: React.ChangeEvent<HTMLInputElement>) => {
    const fileList = event.target.files;
    if (fileList && fileList.length > 0) {
      setFile(fileList[0]);
    } else {
      setFile(null);
    }
  };

  const handleSubmit = (event: React.FormEvent<HTMLFormElement>) => {
    event.preventDefault();
    console.log(file);
  };

  return (
    <form onSubmit={handleSubmit}>
      <label htmlFor="file-upload">Choose a file:</label>
      <input
        id="file-upload"
        type="file"
        accept="image/*"
        onChange={handleFileChange}
      />
      <ImagePreview file={file} />
      <button type="submit">Submit</button>
    </form>
  );
};

export default Form
Enter fullscreen mode Exit fullscreen mode

In this updated Form component, we simply pass the file state as a prop to the ImagePreview component. If there is a file selected, the ImagePreview component will display a preview of it. If there is no file selected, the ImagePreview component will not be displayed.

That's it! We have successfully created an image previewer for our React TypeScript form. Now, our users can preview the image before submitting it, making the process much more user-friendly.

Kindly consider subscribing to my YouTube channel here:
https://bit.ly/CrosbyRoads

Test URL: https://bit.ly/3Li9OlB

Top comments (0)