i was working on a simple spring boot project. the backend is working and its posting and getting data. when i post from swwager i get the data in the frontend table, but when i send the user data from the registeration form it is not displaying on the frontend.
this is the code Adduser.js
import axios from "axios";
import React, { useState } from "react";
import { Link, useNavigate } from "react-router-dom";
export default function AddUser() {
let navigate = useNavigate();
const [user, setUser] = useState({
name: "",
username: "",
email: "",
});
const { name, username, email } = user;
const onInputChange = (e) => {
setUser({ ...user, [e.target.name]: e.target.value });
};
const onSubmit = async (e) => {
e.preventDefault();
await axios.post("http://localhost:8080/api/v1/AddUser", user);
navigate("/");
};
return (
<div className="container">
<div className="row">
<div className="col-md-6 offset-md-3 border rounded p-4 mt-2 shadow">
<h2 className="text-center m-4">Register User</h2>
<form onSubmit={(e) => onSubmit(e)}>
<div className="mb-3">
<label htmlFor="Name" className="form-label">
Name
</label>
<input
type={"text"}
className="form-control"
placeholder="Enter your name"
name="name"
value={name}
onChange={(e) => onInputChange(e)}
/>
</div>
<div className="mb-3">
<label htmlFor="Username" className="form-label">
Username
</label>
<input
type={"text"}
className="form-control"
placeholder="Enter your username"
name="username"
value={username}
onChange={(e) => onInputChange(e)}
/>
</div>
<div className="mb-3">
<label htmlFor="Email" className="form-label">
E-mail
</label>
<input
type={"text"}
className="form-control"
placeholder="Enter your e-mail address"
name="email"
value={email}
onChange={(e) => onInputChange(e)}
/>
</div>
<button type="submit" className="btn btn-outline-primary">
Submit
</button>
<Link className="btn btn-outline-danger mx-2" to="/">
Cancel
</Link>
</form>
</div>
</div>
</div>
);
}
Home.js
import React, { useEffect, useState } from 'react'
import axios from 'axios';
export default function Home() {
const [users,setUsers] = useState([]);
useEffect(()=> {
loadUsers();
},[]);
const loadUsers=async()=>{
const result=await axios.get("http://localhost:8080/api/v1/AllUser")
setUsers(result.data);
}
return (
<div className='container'>
<div className='py-4'>
<table className="table border table-striped shadow ">
<thead>
<tr>
<th scope="col">#</th>
<th scope="col">name</th>
<th scope="col">Username</th>
<th scope="col">Email</th>
<th scope='col'>Action</th>
</tr>
</thead>
<tbody>
{
users.map((user,index)=>(
<tr>
<th scope="row" key={index}>{index}</th>
<td>{user.name}</td>
<td>{user.username}</td>
<td>{user.email}</td>
<td>
<button className='btn btn-primary mx-2'>View</button>
<button className='btn btn-outline-primary mx-2'>Edit</button>
<button className='btn btn-danger mx-2'>Delete</button>
</td>
</tr>
))
}
</tbody>
</table>
</div>
</div>
)
}
App.js
import './App.css';
import "../node_modules/bootstrap/dist/css/bootstrap.min.css"
import Navbar from './layout/Navbar';
import Home from './pages/Home';
import { BrowserRouter as Router, Routes, Route } from 'react-router-dom';
import AddUser from './users/AddUser';
function App() {
return (
<div className="App">
<Router>
<Navbar />
<Routes>
<Route exact path='/' element={<Home />} />
<Route exact path='/api/v1/Adduser' element={<AddUser />} />
</Routes>
</Router>
</div>
);
}
export default App;
//http://localhost:8080/api/v1/AddUser
need help where did i go wrong.
i tried this
import axios from 'axios';
import React, { useState, useEffect } from 'react';
import { Link, useNavigate } from 'react-router-dom';
export default function AddUser() {
const navigate = useNavigate();
const [user, setUsers] = useState({
name: '',
username: '',
email: '',
});
const { name, username, email } = user;
const onInputChange = (e) => {
setUsers({ ...user, [e.target.name]: e.target.value });
};
const onSubmit = async (e) => {
e.preventDefault();
try {
const responsePost = await axios.post('http://localhost:8080/api/v1/AddUser', user);
if (responsePost.status == 201) {
const responseGet = await axios.get('http://localhost:8080/api/v1/AllUser');
if (responseGet.status == 200){
navigate('/')
}
setUsers(responseGet.data)
}
console.log('User added successfully:', responsePost.data);
navigate('/');
} catch (error) {
console.error('Error:', error);
}
};
// Fetch data when the component mounts
useEffect(() => {
const fetchData = async () => {
try {
const response = await axios.get('http://localhost:8080/api/v1/AllUser');
console.log('Data fetched successfully:', response.data);
} catch (error) {
console.error('Error fetching data:', error);
}
};
fetchData();
}, []);
return (
<div className="container">
<div className="row">
<div className="col-md-6 offset-md-3 border rounded p-4 mt-2 shadow">
<h2 className="text-center m-4">Register User</h2>
<form onSubmit={(e) => onSubmit(e)}>
<div className="mb-3">
<label htmlFor="name" className="form-label">
Name
</label>
<input
type="text"
className="form-control"
placeholder="Enter your name"
name="name"
value={name}
onChange={(e) => onInputChange(e)}
/>
</div>
<div className="mb-3">
<label htmlFor="username" className="form-label">
Username
</label>
<input
type="text"
className="form-control"
placeholder="Enter your username"
name="username"
value={username}
onChange={(e) => onInputChange(e)}
/>
</div>
<div className="mb-3">
<label htmlFor="email" className="form-label">
E-mail
</label>
<input
type="text"
className="form-control"
placeholder="Enter your e-mail address"
name="email"
value={email}
onChange={(e) => onInputChange(e)}
/>
</div>
<button type="submit" className="btn btn-outline-primary">
Submit
</button>
<Link className="btn btn-outline-danger mx-2" to="/">
Cancel
</Link>
</form>
</div>
</div>
</div>
);
}