Build a Basic CRUD App with React

By Evytor Dailyโ€ขAugust 6, 2025โ€ขProgramming / Developer

Build a Basic CRUD App with React: A Beginner's Guide

Want to learn React by doing? ๐Ÿ’ก Building a CRUD (Create, Read, Update, Delete) application is a fantastic way to grasp the fundamentals of React. This tutorial will walk you through creating a simple CRUD app, providing hands-on experience with components, state management, and event handling. By the end, you'll have a functional application and a solid foundation for more complex React projects. This is an excellent way to solidify your React skills and gain practical experience.

We'll be diving into the core concepts like state management and component interaction to provide a comprehensive learning experience. So, let's roll up our sleeves and dive into the exciting world of React development!

๐ŸŽฏ Summary: Key Takeaways

  • โœ… Learn to set up a React project using Create React App.
  • โœ… Create components for displaying, adding, editing, and deleting data.
  • โœ… Manage application state using React's `useState` hook.
  • โœ… Implement CRUD operations using event handlers.
  • โœ… Understand how to pass data between components.

Setting Up Your React Environment

Before we start coding, let's set up our React development environment. We'll use Create React App (CRA) to bootstrap our project. CRA provides a pre-configured setup with all the necessary tools and dependencies to start building React applications quickly.

Installing Create React App

Open your terminal and run the following command:

npx create-react-app crud-app
cd crud-app
npm start

This will create a new React project named crud-app, navigate into the project directory, and start the development server. Your app should automatically open in your browser.

Creating the Initial Components

Our CRUD app will consist of several components: a list to display items, a form to add new items, and functionality to edit and delete existing items.

Creating the Item Component

Create a new file named Item.js in the src directory. This component will display individual items.

import React from 'react';

function Item({ item, onDelete, onEdit }) {
  return (
    <div className="item">
      <span>{item.name}</span>
      <button onClick={() => onDelete(item.id)}>Delete</button>
      <button onClick={() => onEdit(item.id)}>Edit</button>
    </div>
  );
}

export default Item;

Creating the ItemList Component

Create a new file named ItemList.js. This component will render a list of Item components.

import React from 'react';
import Item from './Item';

function ItemList({ items, onDelete, onEdit }) {
  return (
    <div className="item-list">
      {items.map(item => (
        <Item key={item.id} item={item} onDelete={onDelete} onEdit={onEdit} />
      ))}
    </div>
  );
}

export default ItemList;

Creating the ItemForm Component

Create a new file named ItemForm.js. This component will allow users to add new items.

import React, { useState } from 'react';

function ItemForm({ onAdd }) {
  const [name, setName] = useState('');

  const handleSubmit = (e) => {
    e.preventDefault();
    if (name.trim()) {
      onAdd(name);
      setName('');
    }
  };

  return (
    <form onSubmit={handleSubmit}>
      <input
        type="text"
        value={name}
        onChange={(e) => setName(e.target.value)}
        placeholder="Enter item name"
      />
      <button type="submit">Add Item</button>
    </form>
  );
}

export default ItemForm;

Implementing CRUD Operations in App.js

Now, let's integrate these components into our App.js file and implement the CRUD operations.

Managing State with useState

We'll use the useState hook to manage the list of items. Update App.js as follows:

import React, { useState } from 'react';
import ItemList from './ItemList';
import ItemForm from './ItemForm';
import './App.css';

function App() {
  const [items, setItems] = useState([
    { id: 1, name: 'Apple' },
    { id: 2, name: 'Banana' },
  ]);
  const [nextId, setNextId] = useState(3);
  const [editingItemId, setEditingItemId] = useState(null);

  const addItem = (name) => {
    setItems([...items, { id: nextId, name }]);
    setNextId(nextId + 1);
  };

  const deleteItem = (id) => {
    setItems(items.filter(item => item.id !== id));
  };

  const editItem = (id) => {
    setEditingItemId(id);
  };

  const updateItem = (id, newName) => {
    setItems(items.map(item => item.id === id ? { ...item, name: newName } : item));
    setEditingItemId(null);
  };

  return (
    <div className="App">
      <h1>React CRUD App</h1>
      <ItemForm onAdd={addItem} />
      <ItemList items={items} onDelete={deleteItem} onEdit={editItem} />
      {editingItemId && (
        <EditItemForm
          itemId={editingItemId}
          items={items}
          onUpdate={updateItem}
          onCancel={() => setEditingItemId(null)}
        />
      )}
    </div>
  );
}

function EditItemForm({ itemId, items, onUpdate, onCancel }) {
  const [name, setName] = useState(items.find(item => item.id === itemId).name);

  const handleSubmit = (e) => {
    e.preventDefault();
    if (name.trim()) {
      onUpdate(itemId, name);
    }
  };

  return (
    <form onSubmit={handleSubmit}>
      <input
        type="text"
        value={name}
        onChange={(e) => setName(e.target.value)}
      />
      <button type="submit">Update</button>
      <button type="button" onClick={onCancel}>Cancel</button>
    </form>
  );
}

export default App;

Adding Styling

Create an App.css file and add some basic styling to improve the app's appearance:

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

.item-list {
  margin-top: 20px;
}

.item {
  display: flex;
  justify-content: space-between;
  align-items: center;
  padding: 10px;
  border: 1px solid #ccc;
  margin-bottom: 5px;
}

input[type="text"] {
  padding: 8px;
  margin-right: 10px;
}

button {
  padding: 8px 12px;
  cursor: pointer;
}

Running Your CRUD App

Now that you've implemented all the components and logic, run your React app by navigating to your project directory in the terminal and running:

npm start

This will start the development server, and your CRUD app should open in your browser. You can now add, edit, and delete items from the list.

Common Issues and Fixes ๐Ÿค”

Here's how to tackle common errors you might face:

Issue: Component Not Re-rendering After State Change

Cause: Direct state mutation.

Fix: Always use the state update function provided by useState (e.g., setItems([...items, newItem])). Avoid directly modifying the state array (e.g., items.push(newItem)).

// Incorrect
items.push(newItem);
setItems(items);

// Correct
setItems([...items, newItem]);

Issue: "Cannot read property 'map' of undefined"

Cause: The items array is initially undefined or null.

Fix: Provide an initial empty array as the default state value.

const [items, setItems] = useState([]);

Keywords

  • React CRUD App
  • Create React App
  • React tutorial
  • CRUD operations
  • React components
  • useState hook
  • React state management
  • Frontend development
  • JavaScript framework
  • React beginner guide
  • Item list
  • Item form
  • Delete functionality
  • Edit functionality
  • React event handling
  • JSX syntax
  • Component lifecycle
  • React styling
  • Basic React project

Frequently Asked Questions

What is a CRUD application?

CRUD stands for Create, Read, Update, and Delete. It represents the four basic operations that can be performed on data in a database or application.

Why is building a CRUD app a good way to learn React?

Building a CRUD app provides hands-on experience with essential React concepts such as components, state management, event handling, and data manipulation. It's a practical project that reinforces fundamental skills.

Can I use a different state management library instead of useState?

Yes, you can use other state management libraries like Redux or Context API for more complex applications. However, for a basic CRUD app, useState is sufficient and easier to manage.

How can I deploy this React app to a live server?

You can deploy your React app using platforms like Netlify, Vercel, or GitHub Pages. These platforms offer simple deployment processes for React applications. Check out Deploying a React App From Local to Live for a complete guide.

The Takeaway

๐ŸŽ‰ Congratulations! You've successfully built a basic CRUD app with React. This hands-on experience has provided you with a strong foundation in React fundamentals. You can now expand upon this project by adding more features, styling, and complexity. Keep practicing, and you'll become a proficient React developer in no time!

Continue your React journey by exploring more advanced topics such as React Router for navigation and Redux or Context API for state management. Understanding React vs Vue can also give you greater insight into the javascript framework landscape. Happy coding! ๐Ÿš€

A clean and modern user interface showcasing a React CRUD application with a list of items, an input field for adding new items, and edit/delete buttons.