Skip to main content

Dynamically Adding Input Fields Using React.js

· 4 min read
Kamlesh
Quality Assurance @TestKarts

Managing dynamic input fields in React.js is a common requirement for modern web applications. Whether you’re building a form that allows users to add multiple email addresses, phone numbers, or any other type of information, dynamically adding and removing input fields can significantly enhance user experience.

In this article, we’ll walk through the process of creating a form with dynamic input fields in React.js. Our form will allow users to add new input fields, delete existing ones, and ensure that at least one input field is always present.

Introduction

Forms are a crucial part of web applications, enabling user interaction and data collection. However, the static nature of traditional forms can be limiting, especially when users need to add multiple entries dynamically. React.js, with its powerful state management and component-based architecture, offers an elegant solution to this problem.

By leveraging React’s capabilities, we can create forms that allow users to add and remove input fields on the fly, providing a more flexible and user-friendly experience. This tutorial will guide you through building such a form step-by-step, covering state management, event handling, and rendering dynamic components.

Setting Up the Project

First, let's create a new React project. If you haven’t already, install the create-react-app tool using npm or yarn.

npx create-react-app dynamic-input-fields
cd dynamic-input-fields
npm start

This will set up a new React project and start the development server.

Creating the DynamicInput Component

Next, we'll create a component called DynamicInput that will handle the dynamic input fields.

Step 1: Initial Setup

Create a new file named DynamicInput.js inside the src directory and add the following code:

import React, { useState } from 'react';

const DynamicInput = () => {
const [inputs, setInputs] = useState([{ value: '' }]);

const handleChange = (index, event) => {
const values = [...inputs];
values[index].value = event.target.value;
setInputs(values);
};

const handleAdd = () => {
setInputs([...inputs, { value: '' }]);
};

const handleRemove = (index) => {
if (inputs.length > 1) {
const values = [...inputs];
values.splice(index, 1);
setInputs(values);
}
};

return (
<div>
{inputs.map((input, index) => (
<div key={index}>
<input
type="text"
value={input.value}
onChange={(event) => handleChange(index, event)}
/>
{inputs.length > 1 && (
<button type="button" onClick={() => handleRemove(index)}>
Remove
</button>
)}
</div>
))}
<button type="button" onClick={handleAdd}>
Add Input
</button>
</div>
);
};

export default DynamicInput;

Step 2: Adding the Component to the App

Open src/App.js and import the DynamicInput component. Then, add it to the component tree:

import React from 'react';
import './App.css';
import DynamicInput from './DynamicInput';

function App() {
return (
<div className="App">
<h1>Dynamic Input Fields</h1>
<DynamicInput />
</div>
);
}

export default App;

Step 3: Styling the Component

You can add some basic CSS to src/App.css to make the form look better:

.App {
font-family: sans-serif;
text-align: center;
}

input {
margin: 5px;
padding: 10px;
}

button {
margin: 5px;
padding: 10px;
}

Understanding the Code

  1. State Management: The inputs state is an array of objects, each containing a value property. This state holds the values of all dynamic input fields.
  2. handleChange Function: This function updates the value of a specific input field based on the user's input.
  3. handleAdd Function: This function adds a new input field by appending an empty object to the inputs array.
  4. handleRemove Function: This function removes an input field at a specified index. It ensures that at least one input field remains by checking the length of the inputs array before allowing deletion.
  5. Rendering the Inputs: The component maps over the inputs array and renders an input field for each item. A remove button is conditionally rendered if there is more than one input field.

Conclusion

Dynamically adding and removing input fields in React.js is a powerful feature that can greatly enhance the flexibility and user-friendliness of your forms. By following the steps outlined in this article, you can implement this functionality in your own projects, ensuring a seamless and interactive user experience.

Remember to consider edge cases, such as preventing the removal of the last input field, to ensure your form behaves as expected.