当前位置: 首页 > news >正文

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

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

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • el-form动态标题和输入值,并且最后一个输入框不校验
  • 【888题竞赛篇】第十二题,2024ICPC网络赛第二场-游戏(Game)
  • 《C++设计新思维-泛型编程与设计模式之应用》阅读记录
  • kubernetes基础命令
  • ClickHouse 与 Quickwit 集成实现高效查询
  • 網路本地連接沒有有效的IP配置:原因與解決方法
  • 探索AI编程新境界:aider库揭秘
  • 素数判断-C语言
  • 视频监控相关笔记
  • js中Fucntion的意义
  • SpringCloud Alibaba五大组件之——Sentinel
  • vue3-vben-admin开发记录、知识点
  • 游戏淡入淡出效果
  • (笔记自用)LeetCode:快乐数
  • 【Elasticsearch】-图片向量化存储
  • 002-读书笔记-JavaScript高级程序设计 在HTML中使用JavaScript
  • exif信息对照
  • Java比较器对数组,集合排序
  • JDK9: 集成 Jshell 和 Maven 项目.
  • JS笔记四:作用域、变量(函数)提升
  • miniui datagrid 的客户端分页解决方案 - CS结合
  • MySQL几个简单SQL的优化
  • Next.js之基础概念(二)
  • PHP的类修饰符与访问修饰符
  • Python_网络编程
  • spring-boot List转Page
  • Theano - 导数
  • Web Storage相关
  • 从0到1:PostCSS 插件开发最佳实践
  • 让你成为前端,后端或全栈开发程序员的进阶指南,一门学到老的技术
  • 如何利用MongoDB打造TOP榜小程序
  • 通过npm或yarn自动生成vue组件
  • 微信开源mars源码分析1—上层samples分析
  • 我看到的前端
  • 一个完整Java Web项目背后的密码
  • 在Mac OS X上安装 Ruby运行环境
  • 怎样选择前端框架
  • 看到一个关于网页设计的文章分享过来!大家看看!
  • ​比特币大跌的 2 个原因
  • # 数据结构
  • ###C语言程序设计-----C语言学习(3)#
  • (AngularJS)Angular 控制器之间通信初探
  • (c语言)strcpy函数用法
  • (NO.00004)iOS实现打砖块游戏(十二):伸缩自如,我是如意金箍棒(上)!
  • (笔记)Kotlin——Android封装ViewBinding之二 优化
  • (初研) Sentence-embedding fine-tune notebook
  • (附源码)spring boot建达集团公司平台 毕业设计 141538
  • (附源码)springboot车辆管理系统 毕业设计 031034
  • (附源码)springboot助农电商系统 毕业设计 081919
  • (一)eclipse Dynamic web project 工程目录以及文件路径问题
  • (转)Unity3DUnity3D在android下调试
  • (转)大型网站架构演变和知识体系
  • (转)总结使用Unity 3D优化游戏运行性能的经验
  • *(长期更新)软考网络工程师学习笔记——Section 22 无线局域网
  • *1 计算机基础和操作系统基础及几大协议