User Information Submission and Deletion System Using React Router
import { BrowserRouter, Routes, Route} from "react-router-dom";
import Navbar from "./Navbar"; // Import the Navbar
import { useState } from "react";
function Home() {
return <h1>Home Page</h1>
}
function Info({ posts, setPosts }) {
//Remove the selected post
function handleDelete(indexToDelete) {
setPosts(posts.filter((_, index) => index !== indexToDelete));
}
return (
<div style={{ textAlign: "center", marginTop: "20px" }}>
<h1>User Information</h1>
{posts.length === 0 ? ( <p>No submission yet!</p>) : (
<ul style={{ listStyle: "none"}}>
{posts.map((post, index) => (
<li key={index} style={{ margin: "15px" }}>
<h3>{post.name}</h3>
<p>Email: {post.email}</p>
<p>Posted on: {post.time}</p>
{/* Delete Button at Bottom Right */}
<button onClick={() => handleDelete(index)}>
Delete
</button>
</li>)
)}
</ul> )}
</div>);
}
function Submit({ setPosts }) {
const [name, setName] = useState(""); // Stores name input
const [email, setEmail] = useState(""); // Stores email input
function handleSubmit(event) {
event.preventDefault(); // Prevents page reload
alert(`Name: ${name}\nEmail: ${email}`);
//Creates an object called newPost
const newPost = { name, email, time: new Date().toLocaleString() };
setPosts((prevPosts) => prevPosts.concat(newPost));
}
return (
<div style={{ textAlign: "center", marginTop: "20px" }}>
<h2>Simple Form</h2>
<form onSubmit={handleSubmit}>
<input
type="text"
value={name}
onChange={(event) => setName(event.target.value)}
placeholder="Enter your name"
style={{ margin: "10px auto", padding: "8px" }}/>
<br />
<input
type="email"
value={email}
onChange={(event) => setEmail(event.target.value)}
placeholder="Enter your email"
style={{ margin: "10px auto", padding: "8px" }}/>
<br />
<button type="submit">Submit</button>
</form>
</div>);
}
function App() {
const [posts, setPosts] = useState([]);
return (
<BrowserRouter>
<Navbar /> {/* Add Navbar at the top */}
<Routes>
<Route path="/" element={<Home />} />
<Route path="/info" element={<Info posts={posts} setPosts={setPosts}/>} />
<Route path="/submit" element={<Submit setPosts={setPosts}/>} />
<Route path="*" element={<h1>404 - Page Not Found</h1>} />
</Routes>
</BrowserRouter>
);
}
export default App;
The .filter() function keeps items that return true in the callback function:
array.filter((element, index) => condition);
- ♣ If condition === true, keep the item.
- ♣ If condition === false, remove the item.
In our case:
posts.filter((_, index) => index !== indexToDelete);
- ♣ If index !== indexToDelete --> Keep the post.
- ♣ If index === indexToDelete --> Remove the post.
- ♣ _ means "this parameter is not used"