讲师中心 微信公众号
AI工具推荐 视频效率加速

MERN 堆栈系列!

浅宇姑娘_2930

浅宇姑娘_2930

发布时间:2024-11-14 18:30:01

|

789人浏览过

|

来源于dev.to

转载

mern 堆栈系列!

帖子 5:使用 react 构建前端用户界面

在第 4 篇文章中,我们使用 express 和 node.js 开发了 restful api 来处理用户数据的 crud 操作。现在,是时候使用 react 创建前端 ui,允许用户通过与后端通信的交互式界面来查看、添加、更新和删除数据。

1.设置前端项目

首先,让我们确保您的 mern 堆栈项目中的前端设置已准备就绪。

  • 导航到前端文件夹并安装 axios 来处理 http 请求:
  cd frontend
  npm install axios

axios 将允许我们轻松地将请求发送到我们的 express api。

2.创建基本的 react 组件

我们将创建用于管理用户的组件:一个用于列出用户的主组件和一个用于添加或编辑用户的表单组件。

组织组件文件夹

在 src 内,创建一个包含以下文件的组件文件夹:

  • userlist.js - 列出用户
  • userform.js - 用于创建和编辑用户

用户列表组件

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;

3.将它们全部放在应用程序组件中

在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;

4.测试应用程序

要使用后端 api 测试前端 ui,请确保后端和前端服务器都在运行:

  • 在后端文件夹中,启动服务器:
  npm start
  • 在前端文件夹中,启动 react 应用程序:
  npm start

访问 http://localhost:3000 与应用程序交互。您应该能够:

  • 添加新用户:在表单中输入详细信息,然后单击“添加用户”。
  • 编辑用户:单击用户名旁边的“编辑”以将其数据加载到表单中。
  • 删除用户:点击“删除”可将用户从列表中删除。

后续步骤

第 6 篇文章中,我们将专注于通过添加样式和处理表单验证来完善 ui 并改善用户体验。更多精彩敬请期待!

热门AI工具

更多
Loomy
Loomy Hot

一款AI工具,主要用于科大讯飞发布的桌面级 AI 助理,比 OpenClaw 更易用、更安全!,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

SkildArt
SkildArt Hot

SkildArt是一款AI文本写作工具,一站式 AI 视觉创作平台。

Laper
Laper Hot

Laper是专为编剧、导演和制片人推出的 AI 原生剧本创作工具。

讯飞智作

讯飞智作是一款AI视频创作工具,AI文本配音工具,数字人课程、营销视频制作。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

UP简历
UP简历 Hot

一款AI办公效率工具,主要用于基于AI技术的免费在线简历制作工具,适合需要提升相关任务效率的用户。

AionClaw
AionClaw Hot

AionClaw是一款面向办公、创作和编程任务的AI桌面智能体。

相关专题

更多
PHP API接口开发与RESTful实践
PHP API接口开发与RESTful实践

本专题聚焦 PHP在API接口开发中的应用,系统讲解 RESTful 架构设计原则、路由处理、请求参数解析、JSON数据返回、身份验证(Token/JWT)、跨域处理以及接口调试与异常处理。通过实战案例(如用户管理系统、商品信息接口服务),帮助开发者掌握 PHP构建高效、可维护的RESTful API服务能力。

504

2025.11.26

Node.js后端开发与Express框架实践
Node.js后端开发与Express框架实践

本专题针对初中级 Node.js 开发者,系统讲解如何使用 Express 框架搭建高性能后端服务。内容包括路由设计、中间件开发、数据库集成、API 安全与异常处理,以及 RESTful API 的设计与优化。通过实际项目演示,帮助开发者快速掌握 Node.js 后端开发流程。

721

2026.02.10

ThinkPHP表单验证与数据安全处理实战
ThinkPHP表单验证与数据安全处理实战

本专题聚焦 ThinkPHP 在表单处理中的验证与安全机制,系统讲解验证器使用、自定义规则、场景验证以及错误提示处理。内容涵盖 XSS 防护、SQL 注入防御、数据过滤与输入校验等关键安全措施。通过实际案例,帮助开发者构建安全可靠的数据处理流程。

161

2026.03.30

堆和栈的区别
堆和栈的区别

堆和栈的区别:1、内存分配方式不同;2、大小不同;3、数据访问方式不同;4、数据的生命周期。本专题为大家提供堆和栈的区别的相关的文章、下载、课程内容,供大家免费下载体验。

4527

2023.07.18

堆和栈区别
堆和栈区别

堆(Heap)和栈(Stack)是计算机中两种常见的内存分配机制。它们在内存管理的方式、分配方式以及使用场景上有很大的区别。本文将详细介绍堆和栈的特点、区别以及各自的使用场景。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

2068

2023.08.10

堆和栈的区别
堆和栈的区别

堆和栈的区别:1、内存分配方式不同;2、大小不同;3、数据访问方式不同;4、数据的生命周期。本专题为大家提供堆和栈的区别的相关的文章、下载、课程内容,供大家免费下载体验。

4527

2023.07.18

堆和栈区别
堆和栈区别

堆(Heap)和栈(Stack)是计算机中两种常见的内存分配机制。它们在内存管理的方式、分配方式以及使用场景上有很大的区别。本文将详细介绍堆和栈的特点、区别以及各自的使用场景。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

2068

2023.08.10

js正则表达式
js正则表达式

php中文网为大家提供各种js正则表达式语法大全以及各种js正则表达式使用的方法,还有更多js正则表达式的相关文章、相关下载、相关课程,供大家免费下载体验。

3756

2023.06.20

Buffalo框架数据库开发全教程
Buffalo框架数据库开发全教程

本专题围绕Buffalo框架数据库开发,讲解database.yml多环境配置、soda与fizz迁移生成回滚、模型结构体标签、增删改查与条件查询、一对多与多对多关联、数据校验、回调钩子、事务处理及原生SQL执行能力。

0

2026.09.23

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn