React入门记事本小项目(一)
来源:互联网 发布:域名注册后怎么建站 编辑:程序博客网 时间:2024/05/28 03:01
学习React之后,断断续续用了几天的时间写了一个React入门的记事本小项目,写前端页面时使用了bootstrap,使用的IDE为InteeliJ IDEA。功能实现了使用React编写App.js文件构建整个前端的页面,并且在React中使用Ajax与后台数据库交互,完成整个记事本记录的CURD,在后台使用了Hibernate进行数据库的操作,并使用阿里巴巴的fastjson进行数据json数据的解析等操作。具体效果图如下:
按照React官网所给的Thinking in React部分所写,按照五个步骤分别依次进行整个项目的编写工作,按官方文档所述五个步骤分别是:
1. 把UI拆分到组件的层级
2. 用React创建一个静态版本
3. 确定最小(但完备)的 UI state 表达
4. 确定你的 state 应该存在于哪里
5. 添加反向数据流
项目Github地址:https://github.com/GuiJu/AjaxService
一、准备工作
项目构建
使用ItelliJ IDEA中的maven工程,选择apache官方提供的webapp模板创建此项目,完成后目录结构建立成如下所示:
其中pom.xml依赖如下所示:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>AjaxService</groupId> <artifactId>AjaxService</artifactId> <packaging>war</packaging> <version>1.0-SNAPSHOT</version> <name>AjaxService Maven Webapp</name> <url>http://maven.apache.org</url> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> <version>4.2.2.Final</version> </dependency> <!-- for JPA, use hibernate-entitymanager instead of hibernate-core --> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-entitymanager</artifactId> <version>4.2.2.Final</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> </dependency> <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.6</version> </dependency> <!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api --> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version> </dependency> <!-- https://mvnrepository.com/artifact/com.alibaba/fastjson --> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.7</version> </dependency> </dependencies> <build> <finalName>AjaxService</finalName> </build></project>
建立数据库
其中,数据库的建表语句如下,导出自mysql:
CREATE DATABASE IF NOT EXISTS `Summary` /*!40100 DEFAULT CHARACTER SET latin1 */;USE `Summary`;-- MySQL dump 10.13 Distrib 5.5.50, for debian-linux-gnu (x86_64)---- Host: 127.0.0.1 Database: Summary-- -------------------------------------------------------- Server version 5.5.50-0ubuntu0.14.04.1/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;/*!40101 SET NAMES utf8 */;/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;/*!40103 SET TIME_ZONE='+00:00' */;/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;---- Table structure for table `summary`--DROP TABLE IF EXISTS `summary`;/*!40101 SET @saved_cs_client = @@character_set_client */;/*!40101 SET character_set_client = utf8 */;CREATE TABLE `summary` ( `id` int(10) NOT NULL AUTO_INCREMENT, `date` date DEFAULT NULL, `content` text, PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=43 DEFAULT CHARSET=utf8;/*!40101 SET character_set_client = @saved_cs_client */;---- Dumping data for table `summary`--LOCK TABLES `summary` WRITE;/*!40000 ALTER TABLE `summary` DISABLE KEYS */;INSERT INTO `summary` VALUES (1,'2016-11-14','1.今天编写及测试最新表格中334-346号的渠道,经测试仅有4个渠道可以正常使用爬虫进行apk的下载,爬虫程序已编写完毕'),(39,'2016-11-18','1.完成所有新13个爬虫程序的编写,测试尚未完成2.完成ReactDemo数据提交到数据库的部分3.完成React的记录的删除部分功能'),(42,'2016-11-22','1.完成两个之前写的爬虫程序的修正 2.开始继续写全爬程序 3.开始用机械键盘了!');/*!40000 ALTER TABLE `summary` ENABLE KEYS */;UNLOCK TABLES;/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;-- Dump completed on 2016-11-22 20:28:30
在从数据库中获取数据时使用JSON进行数据的传输,数据传输时使用类似下面的格式,React的数据流也是从JSON数据中获取,其中的id、date、content分别对应着数据库中的三列:
var INFOS = [ {id: '1', date: '2016-11-8', content: 'content1'}, {id: '2', date: '2016-11-9', content: 'content2'} ];
index.jsp代码如下,日中引入了react及bootstrap所需的js文件:
<!DOCTYPE html><html lang="en"><head> <link rel="icon" type="image/png" href=images/icon.png> <meta charset="UTF-8"> <title>ReactSummary</title> <script src="http://static.runoob.com/assets/react/react-0.14.7/build/react.min.js"></script> <script src="http://static.runoob.com/assets/react/react-0.14.7/build/react-dom.min.js"></script> <script src="http://static.runoob.com/assets/react/browser.min.js"></script> <!-- 新 Bootstrap 核心 CSS 文件 --> <link rel="stylesheet" href="http://cdn.bootcss.com/bootstrap/3.3.0/css/bootstrap.min.css"> <!-- jQuery文件。务必在bootstrap.min.js 之前引入 --> <script src="http://cdn.bootcss.com/jquery/1.11.1/jquery.min.js"></script> <!-- 最新的 Bootstrap 核心 JavaScript 文件 --> <script src="http://cdn.bootcss.com/bootstrap/3.3.0/js/bootstrap.min.js"></script></head><body><div id="app"> <script type="text/babel" src="/js/App.js"/></div></body></html>
完成项目的基本构建之后,下面开始按照React的思想构建记事本项目。
二、将UI拆分到组件层级
主要使用到的bootstrap组件有导航条、模态框和面板,具体拆分如下图所示:整体为App(橙色区域),所有面板合在一起构成PanelList(蓝色区域),而PanelList中又包含着各个单个的面板Panel(红色区域),上方为导航条NavBar(咖色区域)。而输入内容时要用到模态框AddModal,输入更改信息时使用了模态框EditModal划分层级之后如下:
- App包含了NavBar、PanelList、AddModal
- NavBar包含了NavBarHeader、NavBarCollapse
- PanelList中包含了Panel
- 每个Panel中包含了其EditModal
-App --NavBar ---NavBarHeader ---NavBarCollapse --PanelList ---Panel ----EditModal --AddModal
对组件进行划分后,就可以继续进行接下来每个组件的编码,下一节开始进行React静态代码部分的完成。
- React入门记事本小项目(一)
- React入门记事本小项目(二)
- React入门记事本小项目(三)
- Android小项目:记事本
- Android小项目:记事本
- React Native (一) --React 入门
- React学习(一):React入门
- React native 入门一
- react入门(一)
- React native 入门一
- 我的记事本项目之路(一)
- MFC入门(一)-- 第一个简单的windows图形化界面小程序(打开计算器,记事本,查IP)
- 小记事本
- 【React Native】开源一个自己入门学习的小项目
- React入门心得(一)
- 从零开始react入门(一)
- React Native 入门(一)
- React入门狂想曲(一)
- SQL12章 练习
- 机器学习小组知识点19:贝塔分布(Beta Distribution)
- axis2和cxf获取内置对象response\request
- NOIP2016普及组复赛第一题——买铅笔
- opencv-阈值化处理
- React入门记事本小项目(一)
- 图像平移、缩放、旋转、插值 Matlab实现
- 如何成为优秀的驱动开发工程师
- __attribute__((noreturn))的用法
- java csv 导出操作
- c#----App.config文件进行数据库连接
- 学生信息表 成绩表+12章练习
- 润乾报表重复值列的两种计算排名方法
- 警告C4995解决办法 warning C4995: '_vsnprintf': name was marked as #pragma deprecated