1.创建项目
![](https://img.haomeiwen.com/i12355402/9cec7ea22b2d7522.png)
2.cd到该文件夹
![](https://img.haomeiwen.com/i12355402/5df85ba5d654fea7.png)
3.运行(开发模式)
![](https://img.haomeiwen.com/i12355402/22ba07351da9b6b4.png)
如果再起一个服务器,可能会出现端口号不会自动排的现象,针对这种情况,可以在package.json中自行设置端口号,如下图
![](https://img.haomeiwen.com/i12355402/9719cc006ce6603b.png)
4.模拟数据服务器
4.1 http://www.mockapi使用GitHub登录,创建一个新项目
![](https://img.haomeiwen.com/i12355402/65f5b85b61bd2e48.png)
4.2点击进入
![](https://img.haomeiwen.com/i12355402/8b080f058b93a43c.png)
4.3点击进入
![](https://img.haomeiwen.com/i12355402/974417a72799b2a1.png)
4.4填写信息
4.4.1填写路由名称(数据表名)
![](https://img.haomeiwen.com/i12355402/8f972ebf018de8c4.png)
4.4.2填写数据表里的内容
![](https://img.haomeiwen.com/i12355402/19fe3d7f6e840d43.png)
4.4.3生成链接
![](https://img.haomeiwen.com/i12355402/8a9ee2e9975d0daf.png)
4.4.4在浏览器地址栏中输入地址加路由records
![](https://img.haomeiwen.com/i12355402/a49261b65f4cceff.png)
4.5访问数据
第一种方法:通过外网进行访问
①浏览器地址栏测试数据访问
![](https://img.haomeiwen.com/i12355402/edcef8bd5356c6f6.png)
②终端测试数据访问
![](https://img.haomeiwen.com/i12355402/6862d44d923ee54b.png)
③浏览器console debug栏测试api接口(get方式)
![](https://img.haomeiwen.com/i12355402/568250e60d3c3170.png)
第二种方法:将json数据存放在本地服务器进行访问
1.链接:https://github.com/typicode/json-server
2.全局安装
![](https://img.haomeiwen.com/i12355402/dc8227b32ac20357.png)
3.在fssytem中创建一个json文件格式为{“records”:},然后将前文通过外 网地址访问到的数据赋值粘贴到:后面
![](https://img.haomeiwen.com/i12355402/e8921430c3faee01.png)
4.运行服务器
![](https://img.haomeiwen.com/i12355402/60a9a8826e501ef1.png)
5.在地址栏中输入命令中的http地址(服务器运行中)
![](https://img.haomeiwen.com/i12355402/299f3c0d35df8397.png)
4.6App.js中
![](https://img.haomeiwen.com/i12355402/e2956947af3a6b6d.png)
4.7发送请求获取数据(在项目中使用jQuery和axios优化App.js)之使用 jQuery方式
4.7.1命令安装jquery
![](https://img.haomeiwen.com/i12355402/b071108f43a27f7b.png)
4.7.2 App.js中导入jQuery组件
![](https://img.haomeiwen.com/i12355402/8fb60f2d140c8fdb.png)
4.7.3使用jQuery发请求
![](https://img.haomeiwen.com/i12355402/1aa2ba543a88fd5f.png)
4.7.4使用传统的map遍历(App.js中)
![](https://img.haomeiwen.com/i12355402/008b54df1572f3de.png)
4.7.5records文件中
![](https://img.haomeiwen.com/i12355402/78a6c4f170e286d5.png)
4.7.4使用ES6扩展运算符
![](https://img.haomeiwen.com/i12355402/83eceaea22fcef75.png)
4.7.5Records.js
![](https://img.haomeiwen.com/i12355402/f5b85c0b43a6af69.png)
4.8优化部分
4.8.1需要在record.js优化时间显示
![](https://img.haomeiwen.com/i12355402/0bc8193377e1ab3e.png)
4.8.2优化jQuery引入app.js
![](https://img.haomeiwen.com/i12355402/e94dd8844e4c4823.png)
4.8.3引入显示状态和错误显示状态
4.8.3.1定义isloaded(是否完成加载),定义error
![](https://img.haomeiwen.com/i12355402/eb7d0f00fbf1849b.png)
4.8.3.2重设状态机,分别设置成功时和失败时的状态
![](https://img.haomeiwen.com/i12355402/1d2c558778b693bb.png)
4.8.3.3视情况进行判断,写出对应的显示内容
![](https://img.haomeiwen.com/i12355402/17183dba06a32b98.png)
4.9发送请求获取数据(在项目中使用jQuery和axios优化App.js)之使用 axios方式(与jQuery两种方法任选其一即可)
网址:https://github.com/axios/axios
4.9.1安装
![](https://img.haomeiwen.com/i12355402/53d9c236cfe80f85.png)
4.9.2导入
![](https://img.haomeiwen.com/i12355402/9f87d0c49465c720.png)
4.9.3使用因为axios会将所获取的数据存在data的集合中,所以需要response.data
![](https://img.haomeiwen.com/i12355402/4f409c59546afb21.png)
4.9.4引入显示状态和错误显示状态
![](https://img.haomeiwen.com/i12355402/52fc037b86e3ea5b.png)
5.0优化URL请求,目的是使用环境变量来将URL请求地址写灵活,方便统一管理。
方法一:src中创建一个utils文件夹,创建一个Config.js文件,配置环境变量
![](https://img.haomeiwen.com/i12355402/abb4c2b8e4397b6d.png)
App.js中导入
![](https://img.haomeiwen.com/i12355402/95a9f7d8668233a7.png)
使用
![](https://img.haomeiwen.com/i12355402/800c14eb6b2e9b74.png)
由于windows系统不支持配置环境变量,解决方式如下:
![](https://img.haomeiwen.com/i12355402/035de00d3460ae6f.png)
Package.json中配置(红框之间有空格)
![](https://img.haomeiwen.com/i12355402/d0adfd7b73ac210e.png)
重启服务器
![](https://img.haomeiwen.com/i12355402/4d1205e02e381a77.png)
页面显示
![](https://img.haomeiwen.com/i12355402/3378c41441a778c4.png)
方法二:
在根目录下创建一个.env.development.local 文件(与src平级)
![](https://img.haomeiwen.com/i12355402/873c95f6629d0d0e.png)
在package.json中删除之前配置的东西,恢复原状
![](https://img.haomeiwen.com/i12355402/5ab0fce67e40ccc8.png)
重启服务器
![](https://img.haomeiwen.com/i12355402/6540bef6cbd9c182.png)
继续优化
1.删除原来的后缀
![](https://img.haomeiwen.com/i12355402/548d9bfd5da7eb66.png)
2.App.js中简写
![](https://img.haomeiwen.com/i12355402/9bf969a8dd8fd3c7.png)
3.config.js中
![](https://img.haomeiwen.com/i12355402/e334a2b3aed390be.png)
4.App.js
![](https://img.haomeiwen.com/i12355402/481b07e469b20e74.png)
� 5.提取公共变量
![](https://img.haomeiwen.com/i12355402/e47594b84dd5838a.png)
![](https://img.haomeiwen.com/i12355402/eac3baf2345bf46d.png)
![](https://img.haomeiwen.com/i12355402/0a1542e743291759.png)
![](https://img.haomeiwen.com/i12355402/9dfc96c8dcccdc38.png)
功能:增加input框,实现添加,编辑,取消,更新,删除等功能
6.0增加input框
6.1在components文件夹中创建一个名为Input的文件,因为bootstrap按钮和input框相比较大,所以需要另外设置css样式进行引入使用
![](https://img.haomeiwen.com/i12355402/c6ef12c5874a7033.png)
效果图如下:
![](https://img.haomeiwen.com/i12355402/c1304c508c90b8d1.png)
6.2实现添加提交功能
1. Input文件中通过设置input的onChange事件来获取输入的值
![](https://img.haomeiwen.com/i12355402/ba21a1c612f0189b.png)
1.1调用selectedinfo方法
![](https://img.haomeiwen.com/i12355402/7daf4dfe3caf6318.png)
1.2为了保证所有选框都填写完整才可以提交的情况,这里需要设置一下button的属性,当所有都完整的时候,button才可以点击
![](https://img.haomeiwen.com/i12355402/fd2f49fe63fd2be2.png)
![](https://img.haomeiwen.com/i12355402/8b6786cd87fd675c.png)
1.3点击button进行提交
1.3.1使用post方式将数据提交到服务器上(在Config.js文件配置post 方法并开放)
![](https://img.haomeiwen.com/i12355402/e6ffd443ed6e7465.png)
1.3.2在子组件RecordForm中导入上文方法并使用,服务器响应成功后将该值传递给父级App
![](https://img.haomeiwen.com/i12355402/234c1a0a1b593fc9.png)
![](https://img.haomeiwen.com/i12355402/7ee7bb3e8bb06418.png)
1.3.3父级App接收到值后进行处理负责显示在界面上
1.3.3.1导入input文件
![](https://img.haomeiwen.com/i12355402/c86f3b79210814e5.png)
� 1.3.3.2设置与子级对应的行间属性handleNewRecord
![](https://img.haomeiwen.com/i12355402/4358565df3f623e1.png)
1.3..3.3设置addRecord方法
![](https://img.haomeiwen.com/i12355402/aa6ac0c6e212a0b0.png)
6.3实现编辑功能
1.先在增加编辑、删除功能键,并在App.js文件中增加一个操作表头。
![](https://img.haomeiwen.com/i12355402/3e68013678ee2c02.png)
2.当点击编辑的时候,前面的内容状态变为input可修改的状态框
2.1设置一个中间变量edit,默认状态是false,当点击编辑按钮时,edit为true,对应内容状态为可输入的input框。Edit的状态决定使用哪个模板.
2.1.1设置edit中间变量
![](https://img.haomeiwen.com/i12355402/44fb4a257f535070.png)
2.1.2点击编辑按钮调用handleEdit事件(定义点击编辑前的状态模板)
![](https://img.haomeiwen.com/i12355402/f29487235aec3782.png)
2.1.3定义handleEdit方法,并重置状态机设置edit状态
![](https://img.haomeiwen.com/i12355402/4aee4019c04cb49d.png)
2.1.4定义点击编辑按钮后的状态模板
![](https://img.haomeiwen.com/i12355402/736e7858d85692ed.png)
2.1.5根据edit的状态来决定使用哪个模板
![](https://img.haomeiwen.com/i12355402/e52871c7d4c20cfe.png)
6.4实现取消功能(直接在取消调用与编辑按钮一样的方法即可)
![](https://img.haomeiwen.com/i12355402/415b369478dfa6bc.png)
6.5实现更新功能
1.先提交数据到服务器,传值给父级
1.1在Config,js文件中配置更新的put方法,为了得到更新的是哪一个数据,还需要传id值
![](https://img.haomeiwen.com/i12355402/bab69af3534242f1.png)
1.2在Record导入该方法,以便在更新事件中使用
![](https://img.haomeiwen.com/i12355402/4d35a2d808e204ea.png)
1.3给更新按钮增加更新事件
![](https://img.haomeiwen.com/i12355402/e8bd6929304e69d5.png)
1.4定义该更新事件
![](https://img.haomeiwen.com/i12355402/f10d616f154c65de.png)
修改前
![](https://img.haomeiwen.com/i12355402/86cfc1531ca070e0.png)
修改后
![](https://img.haomeiwen.com/i12355402/a06cf9c87bbbb5dd.png)
Record文件中所有之前格式类似为this.props.data的都改为如下格式:
![](https://img.haomeiwen.com/i12355402/5138098e5877c4c8.png)
1.5为了找到当前这个input框的值,需要给input增加一个ref行间属性
![](https://img.haomeiwen.com/i12355402/bc86ccaa86eb97de.png)
2.父级app进行处理显示
2.1设置与子级传值对应的行间属性
![](https://img.haomeiwen.com/i12355402/01789717f4793f37.png)
2.2设置接收子组件传值过来的接收方法updateRecordREC( )
![](https://img.haomeiwen.com/i12355402/a0f46cd758a13d8f.png)
6.6实现删除功能
1.先提交数据到服务器,传值给父级
1.1在Config.js中配置delete方法并开放,将删除的该条数据的id提交至服务器。
![](https://img.haomeiwen.com/i12355402/82489b14bce19676.png)
1.2在子组件Record.js中导入该方法
![](https://img.haomeiwen.com/i12355402/2ace4086b3ae47f4.png)
1.3定义删除方法
![](https://img.haomeiwen.com/i12355402/6f3e1da3af4fff4c.png)
1.4点击删除按钮,调用删除方法
![](https://img.haomeiwen.com/i12355402/9a4af0e43405b0cb.png)
2.父级app接收到进行处理显示
2.1设置与子级传值对应的行间属性
![](https://img.haomeiwen.com/i12355402/082f9d2f0a82303e.png)
2.2设置接收子组件传值过来的删除方法handleDele( )
![](https://img.haomeiwen.com/i12355402/e8e31266b2928bf9.png)
功能:实现收入、支出、合计的功能
7.0在components文件夹中创建一个Amount文件
7.1导入react,为了优化代码,所以一改往常的样式,在父组件注册三个同样的组件Amount来记录收入、支出、合计。
![](https://img.haomeiwen.com/i12355402/f0284dfe8ef3463c.png)
7.2父组件App中
7.2.1设置与子组件参数对应的行间属性
![](https://img.haomeiwen.com/i12355402/479139a69d325436.png)
7.2.2分别设置对应的计算方法
![](https://img.haomeiwen.com/i12355402/b56c9372b67ae562.png)
![](https://img.haomeiwen.com/i12355402/93b3bf443b24432f.png)
![](https://img.haomeiwen.com/i12355402/9539ffcc172ab343.png)
最终实现效果图:
![](https://img.haomeiwen.com/i12355402/10a08755104365d2.png)
网友评论