[增删改查] 使用 React 做后台管理 CRUD 界面和 RESTful 交互

简介:

1、前言

最流行的 JS 库,应用范围广: 
web、安卓、IOS、浏览器端、服务器端等

React 笔者很早就接触了, 
出于情怀,先选择国产的 Vue,后来感到有点鸡肋。 
或许是作为主要使用Java的后端开发人员,对React的面向组件的开发逻辑,感到轻车熟路

React 好比后端开发语言 Java(严谨完整)、Vue 好比后端开发语言 Python(力求简洁) 
或许是出自强迫症,一向严谨的秉性,对那些莫名的简洁,感到些许不安

做项目最基本的技能来了,CRUD 
UI:layui,国产,简单,还自带简单过渡 
JS交互:React 
后台:SpringBoot:https://github.com/larger5/CRUDspringboot.git

2、演示

2.1、主页

这里写图片描述

2.2、删除

这里写图片描述

2.3、新增

这里写图片描述

2.4、修改

这里写图片描述

2.5、查询

这里写图片描述

3、CRUD代码

3.1、主页

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>ITAEM</title>
    <!--  React的核心库 -->
    <script src="js/react.development.js"></script>
    <!-- 提供操作DOM的react扩展库 -->
    <script src="js/react-dom.development.js"></script>
    <!-- 解析JSX语法代码转为纯JS语法代码的库 -->
    <script src="js/babel.min.js"></script>
    <!-- 发送 ajax 请求-->
    <script src="js/fetch.js"></script>
    <!-- LayUI CSS 样式 -->
    <link type="text/css" rel="stylesheet" href="layui/css/layui.css">
</head>
<body>
    <div id="cun"></div>
    <script type="text/babel">
        class CrudComponent extends React.Component{
            constructor(props){
                super(props)
                this.state={
                    users:[]
                }
            }
            componentDidMount () {// 在此方法中启动定时器/绑定监听/发送ajax请求
                const getAllUsersUrl="http://120.79.197.130/crudTest-0.0.1-SNAPSHOT/user/getAllUsers"
                fetch(getAllUsersUrl,{method:"GET"})
                    .then(response=>response.json())
                    .then(data=>{
                        console.log(data)
                        this.setState({
                            users:data
                        })
                    })
            }
            getUserByUserName(){
                const getUserByUserName="http://120.79.197.130/crudTest-0.0.1-SNAPSHOT/user/getUserByUserName/"+this.text1.value
                fetch(getUserByUserName,{method:"GET"})
                    .then(response=>response.json())
                    .then(data=>{
                        console.log(data)
                        this.setState({
                            users:data
                        })
                    })
            }
            deleteUserById(id,userName){
                if(window.confirm("确定要删除 "+userName+" 吗?")){
                    const getUserById="http://120.79.197.130/crudTest-0.0.1-SNAPSHOT/user/deleteUserById/"+id
                    fetch(getUserById,{method:"DELETE"})
                        .then(response=>response.json())
                        .then(data=>{
                            console.log(data)
                            this.setState({
                                users:data
                            })
                        })
                }

            }
            addUser(){
                window.location.href="http://localhost:63342/ReacTest/pageTest/10.CRUD.add.html?_ijt=ti5s31h50tdkekgf4ivl57dd48"
            }
            updateUser(id){
                window.location.href="http://localhost:63342/ReacTest/pageTest/10.CRUD.update.html?_ijt=ot6mkr486r7iothtqcfcbmvo44#"+id
            }
            render(){
                return (
                    <div>
                        <div className="layui-row layui-col-space2">
                            <div className="layui-col-md1">
                                <input type="text" id="query" name="q" required lay-verify="required" placeholder="用户名" className="layui-input" ref={text1=>this.text1=text1} />
                            </div>
                            <div className="layui-col-md1">
                                <button id="btn2" onClick={this.getUserByUserName.bind(this)} className="layui-btn">
                                    <i className="layui-icon">&#xe602;</i>搜索
                                </button>
                            </div>
                        </div>
                        <table className="layui-table">
                            <thead>
                            <tr>
                                <th>id</th>
                                <th>用户名</th>
                                <th>密码</th>
                                <th>修改</th>
                                <th>删除</th>
                            </tr>
                            </thead>
                            <tbody>
                            {
                                this.state.users.map(
                                    (user, index) =>
                                    <tr key={user.id}>
                                        <td>{user.id}</td>
                                        <td>{user.userName}</td>
                                        <td>{user.password}</td>
                                        <td>
                                            <button className="layui-btn layui-btn-normal" onClick={this.updateUser.bind(this,user.id)}>
                                                <i className="layui-icon">&#xe642;</i>修改
                                            </button>
                                        </td>
                                        <td>
                                            <button className="layui-btn layui-btn-danger" onClick={this.deleteUserById.bind(this,user.id,user.userName)}>
                                                <i className="layui-icon">&#xe640;</i>删除
                                            </button>
                                        </td>
                                    </tr>)
                            }
                            </tbody>
                        </table>

                        <button className="layui-btn layui-btn-warm" onClick={this.addUser.bind(this)}>
                            <i className="layui-icon">&#xe654;</i> 添加
                        </button>

                    </div>
                )
            }
        }
        ReactDOM.render(<CrudComponent/>,document.getElementById("cun"))
    </script>
</body>
</html>

 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126

3.2、增加页

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>ITAEM</title>
    <!--  React的核心库 -->
    <script src="js/react.development.js"></script>
    <!-- 提供操作DOM的react扩展库 -->
    <script src="js/react-dom.development.js"></script>
    <!-- 解析JSX语法代码转为纯JS语法代码的库 -->
    <script src="js/babel.min.js"></script>
    <!-- 发送 ajax 请求-->
    <script src="js/fetch.js"></script>
    <!-- LayUI CSS 样式 -->
    <link type="text/css" rel="stylesheet" href="layui/css/layui.css">
</head>
<body>
<div id="cun"></div>
<script type="text/babel">
    class CrudComponent extends React.Component{
        constructor(props){
            super(props)
            this.state={
                users:[]
            }
        }

        addUser(){
            const insertUser="http://120.79.197.130/crudTest-0.0.1-SNAPSHOT/user/insertUser/"+this.userName.value+"/"+this.password.value
            fetch(insertUser,{method:"POST"})
                .then(response=>response.json())
                .then(data=>{
                    console.log(data)
                })
            alert("添加成功")
            window.location.href="http://localhost:63342/ReacTest/pageTest/10.CRUD.html?_ijt=qgmiem8qco2usprrmlul78r7vu"
        }

        render(){
            return (
                <div>
                    <fieldset className="layui-elem-field">
                        <legend>Add User</legend>
                        <div className="layui-field-box">
                            <div className="layui-row layui-col-space2">
                                <div className="layui-col-md1">
                                    <input type="text" id="userName" name="userName" required lay-verify="required" placeholder="用户名" className="layui-input" ref={userName=>this.userName=userName} />
                                </div>

                                <hr className="layui-bg-green" />

                                <div className="layui-col-md1">
                                    <input type="text" id="password" name="password" required lay-verify="required" placeholder="密码" className="layui-input" ref={password=>this.password=password} />
                                </div>

                                <hr className="layui-bg-green" />

                                <div className="layui-col-md1">
                                    <button id="btn2" className="layui-btn" onClick={this.addUser.bind(this)}>
                                        <i className="layui-icon">&#xe608;</i>添加
                                    </button>
                                </div>
                            </div>
                        </div>
                    </fieldset>
                </div>
            )
        }
    }
    ReactDOM.render(<CrudComponent/>,document.getElementById("cun"))
</script>
</body>
</html>

 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73

3.3、修改页

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>ITAEM</title>
    <!--  React的核心库 -->
    <script src="js/react.development.js"></script>
    <!-- 提供操作DOM的react扩展库 -->
    <script src="js/react-dom.development.js"></script>
    <!-- 解析JSX语法代码转为纯JS语法代码的库 -->
    <script src="js/babel.min.js"></script>
    <!-- 发送 ajax 请求-->
    <script src="js/fetch.js"></script>
    <!-- LayUI CSS 样式 -->
    <link type="text/css" rel="stylesheet" href="layui/css/layui.css">
</head>
<body>
<div id="cun"></div>
<script type="text/babel">



    class CrudComponent extends React.Component{
        constructor(props){
            super(props)

        }
        componentDidMount () {
            var userId = location.hash;
            const getUserByUserId="http://120.79.197.130/crudTest-0.0.1-SNAPSHOT/user/getUserByUserId/"+userId.substring(1)
            fetch(getUserByUserId,{method:"GET"})
                .then(response=>response.json())
                .then(data=>{
                    console.log(data[0])
                    this.id.value=data[0].id
                    this.userName.value=data[0].userName
                    this.password.value=data[0].password
                })
        }

        updateUser(){
            const getUserByUserId="http://120.79.197.130/crudTest-0.0.1-SNAPSHOT/user/updateUser/"+this.id.value+"/"+this.userName.value+"/"+this.password.value
            fetch(getUserByUserId,{method:"PUT"})
                .then(response=>response.json())
                .then(data=>{
                    console.log(data)
                })
            alert("修改成功")
            window.location.href="http://localhost:63342/ReacTest/pageTest/10.CRUD.html?_ijt=gdi6jpm674miigqtmehhe26j0u"
        }

        render(){
            return (
                <div>
                    <fieldset className="layui-elem-field">
                        <legend>Update User</legend>
                        <div className="layui-field-box">
                            <div className="layui-row layui-col-space2">

                                <div className="layui-col-md1">
                                    <input type="text" id="id" name="id" required lay-verify="required" placeholder="id" className="layui-input" ref={id=>this.id=id} disabled="true" />
                                </div>

                                <hr className="layui-bg-green" />

                                <div className="layui-col-md1">
                                    <input type="text" id="userName" name="userName" required lay-verify="required" placeholder="用户名" className="layui-input" ref={userName=>this.userName=userName} />
                                </div>

                                <hr className="layui-bg-green" />

                                <div className="layui-col-md1">
                                    <input type="text" id="password" name="password" required lay-verify="required" placeholder="密码" className="layui-input" ref={password=>this.password=password} />
                                </div>

                                <hr className="layui-bg-green" />

                                <div className="layui-col-md1">
                                    <button id="btn2" className="layui-btn" onClick={this.updateUser.bind(this)}>
                                        <i className="layui-icon">&#xe642;</i>修改
                                    </button>
                                </div>
                            </div>
                        </div>
                    </fieldset>
                </div>
            )
        }
    }
    ReactDOM.render(<CrudComponent/>,document.getElementById("cun"))
</script>
</body>
</html>

 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93

4、最后

4.1、JS基础

回调函数:你没有调用,它自己调用 
在HTML里边,一个{}表示里边写JS代码,两个即{{}}表示里边为JS对象

4.2、React 工程化

npm install -g create-react-app 
create-react-app react-app 
cd react-app 
npm start

4.3、几种常见的Ajax请求:

① $.ajax 
② jsonp 
③ axios 
④ fetch 
⑤ vue-resource(基于Vue)

4.4、React编程思想:

面向组件编程,使用虚拟DOM、diff算法,以最小代价渲染、更新页面


原文发布时间为:2018年05月13日

原文作者:larger5

本文来源CSDN如需转载请联系原作者

相关文章
|
4月前
|
开发框架 JSON API
震撼发布!Python Web开发框架下的RESTful API设计全攻略,让数据交互更自由!
【7月更文挑战第22天】在Python Web开发中,设计高效的RESTful API涉及选择框架(如Flask或Django)、明确资源及使用HTTP方法(GET, POST, PUT, DELETE)来操作数据。响应格式通常是JSON,错误处理也很重要。示例展示了使用Flask创建图书管理API,包括版本控制、文档化、安全性和性能优化是最佳实践。这样的API使数据交互更顺畅。
97 2
|
2月前
|
资源调度 JavaScript 前端开发
使用vite+react+ts+Ant Design开发后台管理项目(二)
使用vite+react+ts+Ant Design开发后台管理项目(二)
|
2月前
|
开发框架 JSON 缓存
震撼发布!Python Web开发框架下的RESTful API设计全攻略,让数据交互更自由!
在数字化浪潮推动下,RESTful API成为Web开发中不可或缺的部分。本文详细介绍了在Python环境下如何设计并实现高效、可扩展的RESTful API,涵盖框架选择、资源定义、HTTP方法应用及响应格式设计等内容,并提供了基于Flask的示例代码。此外,还讨论了版本控制、文档化、安全性和性能优化等最佳实践,帮助开发者实现更流畅的数据交互体验。
89 1
|
1月前
|
存储 数据库连接 API
构建RESTful API:使用FastAPI实现高效的增删改查操作
构建RESTful API:使用FastAPI实现高效的增删改查操作
58 0
|
3月前
|
前端开发 应用服务中间件 数据库
SpringMVC入门到实战------八、RESTful案例。SpringMVC+thymeleaf+BootStrap+RestFul实现员工信息的增删改查
这篇文章通过一个具体的项目案例,详细讲解了如何使用SpringMVC、Thymeleaf、Bootstrap以及RESTful风格接口来实现员工信息的增删改查功能。文章提供了项目结构、配置文件、控制器、数据访问对象、实体类和前端页面的完整源码,并展示了实现效果的截图。项目的目的是锻炼使用RESTful风格的接口开发,虽然数据是假数据并未连接数据库,但提供了一个很好的实践机会。文章最后强调了这一章节主要是为了练习RESTful,其他方面暂不考虑。
SpringMVC入门到实战------八、RESTful案例。SpringMVC+thymeleaf+BootStrap+RestFul实现员工信息的增删改查
|
JSON 监控 测试技术
RESTful API设计与实现在员工行为监控系统中的数据交互接口(Go语言)
在现代企业环境中,对员工行为进行监控已经成为确保组织安全和合规性的重要手段。为了提高监控系统的效率和可靠性,自动化测试在系统开发过程中发挥着关键作用。本文将探讨在员工行为监控系统开发中采用JUnit进行自动化测试的实际应用,并通过代码示例演示其工作原理。
236 1
|
6月前
|
前端开发
SpringMVC-RESTful快速开发及案例:基于RESTful页面数据交互
SpringMVC-RESTful快速开发及案例:基于RESTful页面数据交互
78 0
|
JSON 前端开发 API
React+Axios调用api并且渲染在前端界面
React+Axios调用api并且渲染在前端界面
176 0
|
API 数据库 网络架构
Flask进阶:构建RESTful API和数据库交互
在初级教程中,我们已经介绍了如何使用Flask构建基础的Web应用。在本篇中级教程中,我们将学习如何用Flask构建RESTful API,以及如何使用Flask-SQLAlchemy进行数据库操作。