ReactJs

Build a React User Form with Insert, Update, Delete Using JSON Server for a Fake REST API

Build a React User Form with Insert, Update, Delete Using JSON Server

In this tutorial, you’ll learn how to build a complete User Registration System using React JS, React Router, and JSON Server. You’ll create a form to insert data, a user list view, an edit form, and delete functionality — all connected to a mock REST API.

📦 Step 1: Setup Your React App

npx create-react-app react-json-crud
cd react-json-crud
npm install axios react-router-dom

🗂️ Step 2: JSON Server Setup

npm install -g json-server

Then create a db.json file in the root folder:

{
  "users": []
}
json-server --watch db.json --port 5000

Now your fake API is available at: http://localhost:5000/users

📁 Step 3: Project Structure

  • src/pages/Register.js
  • src/pages/UserList.js
  • src/pages/EditUser.js
  • src/App.js

 

📦 Install React Router

To handle routing between pages like Register, User List, and Edit, install react-router-dom using the following command:

npm install react-router-dom

This library allows you to create single-page application (SPA) routes using components like <BrowserRouter>, <Routes>, and <Route>.

🔧 Step 4: Configure Routes in App.js


import React from 'react';
import { BrowserRouter as Router, Routes, Route, Link } from 'react-router-dom';
import Register from './pages/Register';
import UserList from './pages/UserList';
import EditUser from './pages/EditUser';

function App() {
  return (
    <Router>
      <div style={{ padding: '2rem' }}>
        <nav>
          <Link to="/register">Register</Link> | 
          <Link to="/users">User List</Link>
        </nav>
        <hr />
        <Routes>
          <Route path="/register" element={<Register />} />
          <Route path="/users" element={<UserList />} />
          <Route path="/edit/:id" element={<EditUser />} />
        </Routes>
      </div>
    </Router>
  );
}

export default App;

📝 Step 5: Create Register Page

src/pages/Register.js


import React, { useState } from 'react';
import axios from 'axios';

const Register = () => {
  const [form, setForm] = useState({
    firstName: '',
    lastName: '',
    email: '',
    password: ''
  });

  const handleChange = (e) => {
    setForm({ ...form, [e.target.name]: e.target.value });
  };

  const handleSubmit = async (e) => {
    e.preventDefault();
    await axios.post('http://localhost:5000/users', form);
    alert('User registered!');
    setForm({ firstName: '', lastName: '', email: '', password: '' });
  };

  return (
    <form onSubmit={handleSubmit}>
      <h3>Register User</h3>
      <input name="firstName" placeholder="First Name" value={form.firstName} onChange={handleChange} /><br />
      <input name="lastName" placeholder="Last Name" value={form.lastName} onChange={handleChange} /><br />
      <input name="email" type="email" placeholder="Email" value={form.email} onChange={handleChange} /><br />
      <input name="password" type="password" placeholder="Password" value={form.password} onChange={handleChange} /><br />
      <button type="submit">Register</button>
    </form>
  );
};

export default Register;

👥 Step 6: Create User List Page

src/pages/UserList.js


import React, { useEffect, useState } from 'react';
import axios from 'axios';
import { Link } from 'react-router-dom';

const UserList = () => {
  const [users, setUsers] = useState([]);

  const fetchUsers = async () => {
    const res = await axios.get('http://localhost:5000/users');
    setUsers(res.data);
  };

  const deleteUser = async (id) => {
    await axios.delete(`http://localhost:5000/users/${id}`);
    fetchUsers();
  };

  useEffect(() => {
    fetchUsers();
  }, []);

  return (
    <div>
      <h3>User List</h3>
      {users.map(user => (
        <div key={user.id}>
          {user.firstName} {user.lastName} - {user.email}
          <Link to={`/edit/${user.id}`}> Edit</Link>
          <button onClick={() => deleteUser(user.id)}>Delete</button>
        </div>
      ))}
    </div>
  );
};

export default UserList;

✏️ Step 7: Create Edit Page

src/pages/EditUser.js


import React, { useEffect, useState } from 'react';
import axios from 'axios';
import { useParams, useNavigate } from 'react-router-dom';

const EditUser = () => {
  const { id } = useParams();
  const navigate = useNavigate();
  const [form, setForm] = useState({
    firstName: '',
    lastName: '',
    email: '',
    password: ''
  });

  useEffect(() => {
    axios.get(`http://localhost:5000/users/${id}`).then(res => setForm(res.data));
  }, [id]);

  const handleChange = (e) => {
    setForm({ ...form, [e.target.name]: e.target.value });
  };

  const handleSubmit = async (e) => {
    e.preventDefault();
    await axios.put(`http://localhost:5000/users/${id}`, form);
    navigate('/users');
  };

  return (
    <form onSubmit={handleSubmit}>
      <h3>Edit User</h3>
      <input name="firstName" value={form.firstName} onChange={handleChange} /><br />
      <input name="lastName" value={form.lastName} onChange={handleChange} /><br />
      <input name="email" value={form.email} onChange={handleChange} /><br />
      <input name="password" value={form.password} onChange={handleChange} /><br />
      <button type="submit">Update</button>
    </form>
  );
};

export default EditUser;

🚀 Final Step: Run the App

  • Start JSON Server: json-server --watch db.json --port 5000
  • Start React App: npm start

🎉 Done!

You now have a full working CRUD app using React + React Router + JSON Server. Users can be registered, edited, listed, and deleted. It’s perfect for learning full frontend API interaction before moving to real backends.

Leave a Reply

Your email address will not be published. Required fields are marked *