【React】(推荐项目)一个用 React 构建的 CRUD 应用程序

推荐项目:CRUD 应用示例

在本篇文章中,我想向大家推荐一个非常实用的项目:CRUD 应用示例。这个项目展示了如何使用现代技术栈创建一个基础的增删改查(CRUD)应用,非常适合用于学习和实践后端开发技能。

适用场景

通过这个示例,您可以掌握 CRUD 操作的完整流程,并了解如何将前后端整合在一起构建一个完整的应用。

无论您是后端开发新手,还是希望进一步巩固自己的开发技能,这个项目都可以作为一个很好的参考示例。

项目链接

GitHub 项目地址:https://github.com/SafdarJamal/crud-app

项目截图

  • 登录界面
    在这里插入图片描述
  • 主页
    在这里插入图片描述
  • 编辑界面

在这里插入图片描述

部分代码

  • 登录
import React, { useState } from 'react';
import Swal from 'sweetalert2';const Login = ({ setIsAuthenticated }) => {const adminEmail = 'admin@example.com';const adminPassword = 'qwerty';const [email, setEmail] = useState('admin@example.com');const [password, setPassword] = useState('qwerty');const handleLogin = e => {e.preventDefault();if (email === adminEmail && password === adminPassword) {Swal.fire({timer: 1500,showConfirmButton: false,willOpen: () => {Swal.showLoading();},willClose: () => {localStorage.setItem('is_authenticated', true);setIsAuthenticated(true);Swal.fire({icon: 'success',title: 'Successfully logged in!',showConfirmButton: false,timer: 1500,});},});} else {Swal.fire({timer: 1500,showConfirmButton: false,willOpen: () => {Swal.showLoading();},willClose: () => {Swal.fire({icon: 'error',title: 'Error!',text: 'Incorrect email or password.',showConfirmButton: true,});},});}};return (<div className="small-container"><form onSubmit={handleLogin}><h1>Admin Login</h1><label htmlFor="email">Email</label><inputid="email"type="email"name="email"placeholder="admin@example.com"value={email}onChange={e => setEmail(e.target.value)}/><label htmlFor="password">Password</label><inputid="password"type="password"name="password"placeholder="qwerty"value={password}onChange={e => setPassword(e.target.value)}/><input style={{ marginTop: '12px' }} type="submit" value="Login" /></form></div>);
};export default Login;
  • 主页
import React, { useState, useEffect } from 'react';
import Swal from 'sweetalert2';import Header from './Header';
import Table from './Table';
import Add from './Add';
import Edit from './Edit';import { employeesData } from '../../data';const Dashboard = ({ setIsAuthenticated }) => {const [employees, setEmployees] = useState(employeesData);const [selectedEmployee, setSelectedEmployee] = useState(null);const [isAdding, setIsAdding] = useState(false);const [isEditing, setIsEditing] = useState(false);useEffect(() => {const data = JSON.parse(localStorage.getItem('employees_data'));if (data !== null && Object.keys(data).length !== 0) setEmployees(data);}, []);const handleEdit = id => {const [employee] = employees.filter(employee => employee.id === id);setSelectedEmployee(employee);setIsEditing(true);};const handleDelete = id => {Swal.fire({icon: 'warning',title: 'Are you sure?',text: "You won't be able to revert this!",showCancelButton: true,confirmButtonText: 'Yes, delete it!',cancelButtonText: 'No, cancel!',}).then(result => {if (result.value) {const [employee] = employees.filter(employee => employee.id === id);Swal.fire({icon: 'success',title: 'Deleted!',text: `${employee.firstName} ${employee.lastName}'s data has been deleted.`,showConfirmButton: false,timer: 1500,});const employeesCopy = employees.filter(employee => employee.id !== id);localStorage.setItem('employees_data', JSON.stringify(employeesCopy));setEmployees(employeesCopy);}});};return (<div className="container">{!isAdding && !isEditing && (<><HeadersetIsAdding={setIsAdding}setIsAuthenticated={setIsAuthenticated}/><Tableemployees={employees}handleEdit={handleEdit}handleDelete={handleDelete}/></>)}{isAdding && (<Addemployees={employees}setEmployees={setEmployees}setIsAdding={setIsAdding}/>)}{isEditing && (<Editemployees={employees}selectedEmployee={selectedEmployee}setEmployees={setEmployees}setIsEditing={setIsEditing}/>)}</div>);
};export default Dashboard;

如果你觉得这篇文章对你有帮助,别忘了点赞和关注,更多技术干货敬请期待!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1541235.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

【2024华为杯数学建模研赛赛题已出(A-F题)】

华为杯2024年中国研究生数学建模竞赛A-F题已公布 A题 B题 C题 D题 E题 F题

骨传导耳机怎么选?深扒2024五款热门骨传导耳机!

耳机在我们的日常生活中渐渐变得不可或缺&#xff0c;早晨出门、通勤、工作&#xff0c;甚至睡觉时&#xff0c;它们总是陪伴在侧。尽管我们都知道长期使用耳机会对听力造成一定影响&#xff0c;但骨传导耳机的出现为我们提供了更为安全和卫生的选择。这种耳机的设计使耳朵保持…

其他比较条件

使用BETWEEN条件 可以用BETWEEN范围条件显示基于一个值范围的行。指定的范围包含一个下限和一个上限。 示例&#xff1a;查询employees表&#xff0c;薪水在3000-8000之间的雇员ID、名字与薪水。 select employee_id,last_name,salary from employees where salary between 3…

泛微E9开发 创建自定义浏览框,关联物品管理表【1】

创建自定义浏览框&#xff0c;关联物品管理表【1】 1、自定义浏览框1.1 概念1.2 前端样式 2、创建物品管理表2.1 新建建模表单操作方法2.2 物品管理表 3、创建浏览按钮 1、自定义浏览框 1.1 概念 自定义浏览框可以理解为是建模引擎中的表与表关联的一个桥梁。比如利用建模引擎…

菜鸟也能轻松上手的Java环境配置方法

初学者学习Java这么编程语言&#xff0c;第一个难题往往是Java环境的配置&#xff0c;今天与大家详细地聊一聊&#xff0c;以便大家能独立完成配置方法和过程。 首先&#xff0c;找到“JDK”&#xff0c;点击“archive”&#xff1a; 向下滑&#xff0c;在“previous java rel…

小白src挖掘 | 记某证书站的虚拟仿真实验平台

&#x1f36c; 博主介绍 &#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 hacker-routing &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【应急响应】 【edusrc漏洞挖掘】 【VulnHub靶场复现】【面试分析】 &#x1f389;欢迎关注…

017_FEA_CSG_in_Matlab新的统一有限元分析工作流之2D几何

Matlab新的统一有限元分析工作流 从2023a开始&#xff0c;Matlab提供了一个统一有限元分析工作流&#xff08;UFEAW&#xff0c;unified finite element analysis workflow&#xff09;。 这个新的工作留提供一个统一的接口来求解三类问题&#xff0c;并且可以用同一套数据随…

并查集(上)

并查集简要介绍&#xff1a; 我们先讲并查集的一般使用场景&#xff0c;之后再讲并查集的具体细节以及原理。 并查集的使用一般是如下的场景&#xff1a; 一开始每个元素都拥有自己的集合&#xff0c;在自己的集合里只有这个元素自己。 f i n d ( i ) find(i) find(i)&#…

数据结构之算法复杂度

目录 前言 一、复杂度的概念 二、时间复杂度 三、大O的渐进表示法 四、空间复杂度 五、常见复杂度对比 总结 前言 本文主要讲述数据结构中的算法复杂度 一、复杂度的概念 算法在编写成可执行程序后&#xff0c;运行时需要耗费时间资源和空间(内存)资源。因此衡量一个算法的好坏…

python源代码编译exe 防止反编译的问题

1&#xff09;使用pyinstaller 打包为exe, 记住是版本是5.*&#xff0c;我用的是5.13.2 &#xff0c;不能是6.* 这是第一步。 pyinstaller -F -i d:\whs.ico packer.py -w 2&#xff09;使用pyarmor 再次加密,我使用的版本是8.3.11&#xff0c;不是7.*&#xff0c;这是第二步…

摩托车骑行行为检测系统源码分享

摩托车骑行行为检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Comput…

Cursor Rules 让 Cursor AI 代码生成更智能、更高效,效率再次飞升!

最近,AI 代码生成工具越来越火,比如 Cursor AI 编辑器。很多开发者已经开始使用它来自动生成代码,以提高工作效率。不过你有没有发现,有时候 AI 自动生成的代码并不总是符合最佳实践?比如变量命名不够规范、代码风格不统一,或者生成的代码逻辑不够清晰。这些问题有时让人…

c# 线程等待变量的值符合条件

在C#中&#xff0c;如果你想让一个线程等待直到某个变量的值满足特定条件&#xff0c;你可以使用ManualResetEvent或者AutoResetEvent来实现线程间的同步。以下是使用AutoResetEvent实现的一个简单例子&#xff1a; 在这个例子中&#xff0c;同时实现了如何让static函数访问非…

闲鱼ip地址在哪就是人在哪吗

在数字化时代&#xff0c;IP地址作为网络设备的唯一标识&#xff0c;常被用于追踪用户的地理位置。然而&#xff0c;对于闲鱼这样的二手交易平台&#xff0c;用户的IP地址是否真实反映了其所在地&#xff0c;却是一个值得深入探讨的问题。本文将围绕这一话题展开&#xff0c;带…

单卡3090 选用lora微调ChatGLM3-6B

环境配置 Python 3.10.12 transformers 4.36.2 torch 2.0.1 下载demo代码 在官方网址https://github.com/THUDM/ChatGLM3/blob/main/finetune_demo 下载demo代码cd 进入文件夹 pip install -r requirements.txt 安装一些包 基本知识 SFT 全量微调: 4张显卡平均分配&#…

昂科烧录器支持ST意法半导体的电可擦除可编程存储器M95128-DFDW

芯片烧录行业领导者-昂科技术近日发布最新的烧录软件更新及新增支持的芯片型号列表&#xff0c;其中ST意法半导体的电可擦除可编程存储器M95128-DFDW已经被昂科的通用烧录平台AP8000所支持。 M95128-DFDW是电可擦除可编程存储器&#xff08;EEPROM&#xff09;通过SPI总线进行…

springcloud微服务实战<1>

单机结构 我只需要一台服务器完成我项目的部署&#xff08;单体应用&#xff09;&#xff0c;开发部署简单 他就会有单点问题&#xff0c; 因为此时只有一台机器&#xff0c;一旦这个机器挂了&#xff0c;我用户就没有办法使用应用的服务了 这个就是单点问题针对我们的项目进…

Qt/C++ 多线程同步机制详解及应用

在多线程编程中&#xff0c;线程之间共享资源可能会导致数据竞争和不一致的问题。因此&#xff0c;采用同步机制确保线程安全至关重要。在Qt/C中&#xff0c;常见的同步机制有&#xff1a;互斥锁&#xff08;QMutex、std::mutex&#xff09;、信号量&#xff08;QSemaphore&…

多模态大模型MiniCPM-V技术学习

目前性价比最高的多模态模型 Minicpm-V-2.6参数8B&#xff0c;int4版本推理显存仅7GB&#xff0c;并且在幻觉数据集上效果好于其他模型&#xff0c;测试下来效果非常好&#xff0c;官方演示里面还给出了手机上端侧运行的图片和视频推理示例 p.s.Qwen2-VL和Minicpm-V-2.6头对头…

【操作系统】02.深入理解操作系统

一、操作系统的定位 任何计算机系统都包含一个基本的程序集合&#xff0c;称为操作系统(OS)。笼统的理解&#xff0c;操作系统包括操作系统内核和其他程序。 由上述的宏观图其实我们就知道&#xff1a;操作系统是一款进行软硬件资源管理的软件。 二、设计操作系统的目的 操…