【React全家桶入门之三】基本的用户添加
来源:互联网 发布:淘宝店铺装修页头图片 编辑:程序博客网 时间:2024/05/17 02:35
新增页面
我们现在的应用只有一个Hello React的页面,现在需要添加一个用于添加用户的页面。
首先在/src
目录下新增一个pages
目录,用于存放渲染页面的组件。
然后在/src/pages
中新增一个UserAdd.js
文件。
Tips: 关于文件的命名,我采用这样的方式:[模块][功能].xxx,上面是一个添加用户的页面,所以模块是User,功能是Add,良好的命名风格可以让你的项目、代码更容易维护(这里由于是react的一个组件,所以使用大写开头的大驼峰命名法)。
在这个文件中写入一个基本的React组件:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
配置路由
我们需要使用react-router提供的路由组件来控制当前路由下页面应该渲染的组件。
修改/src/index.js
为:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
打开浏览器的http://localhost:8000
发现页面一片空白,在控制台中可以看到一个错误信息:
这是因为我们只配了一个/user/add的路由,我们来访问一下http://localhost:8000/#/user/add
看看
新页面出来了。现在需要把上面的那个错误干掉:新建一个主页,并在主页中添加一个链接链到添加用户的页面。
还是在/src/pages/
中新建一个Home.js
,写入代码:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
然后在/src/index.js
中添加一个指向Home的Route:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
首页已经可以正常访问了,并且点击添加用户也正确地跳转到了添加用户页面。
Q: 为什么我看到的url里有一个’#’?
A: 这是由于我们给Router组件传入了hashHistory,url中’#’及’#’以后的部分属于hash,hash的变化并不会引起页面的重新刷新,而hashHistory会监听hash的变化使得Router组件能够根据url渲染出正确的组件。除了hash History之外还有browserHistory和memoryHistory。使用browserHistory可以让url变得像标准的url一样(没有#),但是需要在后端做一些特殊处理;memoryHistory是用于做服务端渲染时使用的。Q: 为什么Home.js里要用Link组件而不是一个标准的a标签?
A: 上面说了,我们使用了hashHistory,正确的页面url中应该都是有一个’#’的,如果直接使用a标签,你需要这么写:<a href=”/#/user/add”>添加用户</a>。但是如果我们想要换成browserHistory,就需要把所有标签中的’#’去掉。使用react-router提供的Link组件可以让我们无视history之间的差异性,直接写标准的路由”/user/add”就可以了。此外,由于我们写的是单页面应用(SPA),Link组件会阻止页面的跳转(仅仅只是改变了url,然后改变了渲染的组件)。
编写页面
现在开始编写添加用户的逻辑。
在上一篇中,我们定义了User的结构为:
- 1
- 2
- 3
- 4
- 5
- 6
- 1
- 2
- 3
- 4
- 5
- 6
在新建的时候,我们需要使用post方式将新用户的name、age、gender发送给接口http://localhost:3000/user
,因此这个添加用户的页面需要提供一个包含上述3个字段控件的表单:
- 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
- 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
现在我们的页面是这个样子:
获取表单的值
现在我们可以在表单中填写数据了,但是还不能获取到我们输入的值。
在React中处理表单有些不一样,由于React提倡“单向数据流”,React中的表单并不提供双向数据绑定的功能,我们需要给表单绑定它的value,然后提供一个onChange的处理方法来更新value的值。
这里我们使用组件的state来维护表单的值,在onChange的时候使用setState来更新值,最后,在表单提交事件被触发的时候,我们输出state来观察最终获得的表单值:
- 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
- 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
在页面中填写表单,点提交后可以看到如下界面:
调用接口创建用户
拿到了表单数据,我们离目标已经很近了,就差最后一步:把表单的值通过接口提交
调用接口可以有很多方法:Ajax、表单提交、fetch。
由于直接使用表单提交会引起页面的跳转,这不符合我们单页应用的原则。这里我们使用比Ajax更先进易用的fetch。
修改/pages/UserAdd.js
中的handleSubmit
方法:
- 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
- 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
填写表单然后点击提交后,可以看到弹出一个添加成功的提示框:
打开http://localhost:3000/user
查看所有用户列表,发现用户已经被添加进去了:
至此就完成了基本的添加用户功能~
- 【React全家桶入门之三】基本的用户添加
- 【React全家桶入门之三】基本的用户添加
- 【React全家桶入门之六】渲染用户列表
- 【React全家桶入门之八】用户编辑与删除
- React全家桶之Redux(三)
- 【React全家桶入门之二】项目搭建
- 【React全家桶入门之四】加入表单验证
- 【React全家桶入门之七】提取布局组件
- 【React全家桶入门之CODE】项目代码与使用方法
- 【React全家桶入门之十】登录与身份认证
- 【React全家桶入门之十一】引入AntDesign组件库
- 【React全家桶入门之十二】Redux介绍
- 【React全家桶入门之十一】引入AntDesign组件库
- 【React全家桶入门之四】加入表单验证
- 【React全家桶入门之二】项目搭建
- 【React全家桶入门之十】登录与身份认证
- React全家桶之React(一)
- 【React全家桶入门之一】引言
- Android.mk
- java开发使用openoffice时遇到的坑!!!!
- windbg 使用python寻找寄存器的值
- MySQL数据库修改字符集为UTF-8
- 最新JAVA调用新浪微博API之发微博
- 【React全家桶入门之三】基本的用户添加
- hash冲突原理及解决方法
- 重建二叉树 -- 漫漫算法路 刷题篇
- 正则表达式提取Json数据的方法
- TWaver3D直线、曲线、曲面的绘制
- 登录系统的验证码
- STS Tomcat 服务器搭建
- [笔记分享] [OS] Linux设备模型之设备注册
- Scrapy 安装问题详解