
在第 4 篇文章中,我们使用 express 和 node.js 开发了 restful api 来处理用户数据的 crud 操作。现在,是时候使用 react 创建前端 ui,允许用户通过与后端通信的交互式界面来查看、添加、更新和删除数据。
首先,让我们确保您的 mern 堆栈项目中的前端设置已准备就绪。
cd frontend npm install axios
axios 将允许我们轻松地将请求发送到我们的 express api。
我们将创建用于管理用户的组件:一个用于列出用户的主组件和一个用于添加或编辑用户的表单组件。
在 src 内,创建一个包含以下文件的组件文件夹:
userlist将从后端获取用户数据并以列表形式显示。将以下代码添加到 userlist.js:
// src/components/userlist.js
import react, { usestate, useeffect } from "react";
import axios from "axios";
const userlist = ({ onedit, ondelete }) => {
const [users, setusers] = usestate([]);
useeffect(() => {
const fetchusers = async () => {
try {
const response = await axios.get("/api/users");
setusers(response.data);
} catch (error) {
console.error("error fetching users:", error);
}
};
fetchusers();
}, []);
return (
<div>
<h2>user list</h2>
<ul>
{users.map(user => (
<li key={user._id}>
{user.name} - {user.email}
<button onclick={() => onedit(user)}>edit</button>
<button onclick={() => ondelete(user._id)}>delete</button>
</li>
))}
</ul>
</div>
);
};
export default userlist;
userform 组件处理创建和更新用户。
// src/components/userform.js
import react, { usestate, useeffect } from "react";
import axios from "axios";
const userform = ({ selecteduser, onsave }) => {
const [formdata, setformdata] = usestate({ name: "", email: "", password: "" });
useeffect(() => {
if (selecteduser) {
setformdata(selecteduser);
}
}, [selecteduser]);
const handlechange = e => {
setformdata({ ...formdata, [e.target.name]: e.target.value });
};
const handlesubmit = async e => {
e.preventdefault();
try {
if (selecteduser) {
await axios.put(`/api/users/${selecteduser._id}`, formdata);
} else {
await axios.post("/api/users", formdata);
}
onsave();
setformdata({ name: "", email: "", password: "" });
} catch (error) {
console.error("error saving user:", error);
}
};
return (
<form onsubmit={handlesubmit}>
<input name="name" value={formdata.name} onchange={handlechange} placeholder="name" required />
<input name="email" value={formdata.email} onchange={handlechange} placeholder="email" required />
<input name="password" value={formdata.password} onchange={handlechange} placeholder="password" required />
<button type="submit">{selecteduser ? "update user" : "add user"}</button>
</form>
);
};
export default userform;
在app.js中,我们将结合userlist和userform来显示用户列表并处理添加/更新用户。
// src/app.js
import react, { usestate } from "react";
import userlist from "./components/userlist";
import userform from "./components/userform";
import axios from "axios";
const app = () => {
const [selecteduser, setselecteduser] = usestate(null);
const handleedit = user => setselecteduser(user);
const handledelete = async userid => {
try {
await axios.delete(`/api/users/${userid}`);
window.location.reload();
} catch (error) {
console.error("error deleting user:", error);
}
};
const handlesave = () => {
setselecteduser(null);
window.location.reload();
};
return (
<div>
<h1>manage users</h1>
<userform selecteduser={selecteduser} onsave={handlesave} />
<userlist onedit={handleedit} ondelete={handledelete} />
</div>
);
};
export default app;
要使用后端 api 测试前端 ui,请确保后端和前端服务器都在运行:
npm start
npm start
访问 http://localhost:3000 与应用程序交互。您应该能够:
在第 6 篇文章中,我们将专注于通过添加样式和处理表单验证来完善 ui 并改善用户体验。更多精彩敬请期待!
以上就是MERN 堆栈系列!的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号