基于React实现表单数据的添加和删除详解


Posted in Javascript onMarch 14, 2017

前言

最近在学习React,做了一个简单的Demo,用以自勉及和有需要的朋友们参考学习。

实现功能

在输入框中输入数据后,点击保存按钮,数据将会逐一显示在输入框下方,点击保存后显示的任何一条数据,该数据即可被删除。

实现思路

在开始实现之前,我们需要理清我们的思路,这样才能更好地去完成预定功能。

  1. 点击保存按钮时,输入框中的数据读取,可通过onChange绑定事件,获得输入框数据:e.target.value
  2. 自定义一个事件,输入数据后,点击保存按钮时,数据的存储操作交由该事件完成
  3. 当不断点击保存按钮时,数据应该是多个的,可选用数组来存储数据
  4. 数组中,数组的索引是唯一表示一个数据的方式,数据的操作可通过索引进行

实现过程

class ReactDemo extends React.Component{
 render(){
 return(
  <div>
  <input />
  <button>点击保存</button>
  </div>
 )
 }
}
ReactDOM.render(<ReactDemo />,document.getElementById('app'))

这是本次Demo的雏形,接下来我们将会在这上面一点一点地做修改,进行功能的完善。

此时,表单为非受控组件,也就是普通的组件,在输入框中输入任何数据,在输入框内均会显示。

React组件提供了this.state以及this.setState,利用它们,我们可以十分方便地管理、更新组件的状态。

constructor() {
 super()
 this.state = {
  val: '',
  arr: []
 }
 }

this.state通常在构造函数内部进行初始化,其值为对象,本例中,val用于保存输入框中的值,初始值为空字符串;arr是个数据,用于存储多个数据。

handleData(e) {
 this.setState({
  val: e.target.value
 })
 }

这里,this.setState会将val的值更新为e.target.value,当组件状态值(这里为val)发生改变,组件就会自动调用render()重新渲染UI 。

onButtonClick(e) {
  var val = this.state.val
  this.setState({
  arr: [val, ...this.state.arr]
  })
 }

展开运算符(…)是ES6的语法,它允许一个表达式在某处展开,利用这一特性,可将数组元素逐一展开:...this.state.arr,让val总是成作为数组的第一个元素,组成新数组[val, ...this.state.arr]后,赋给arr。

onDelete(index, e) {
 this.setState({
  arr: this.state.arr.filter((elem, i) => index !== i)
 })
 }

通过数组的索引对数据进行删除操作, [].filter()接受一个方法作为它的参数,并返回匹配条件(index !== i)的元素组成的新数组。

{arr1.map((i,index) =>(
 <div onClick={this.onDelete.bind(this,index)}>{i}</div>
 ))}

这种JSX的语法是由facebook官方提出的一种十分简明的写法,个人觉得好用到爆。[].map()对数组元素依次进行函数的调用,并返回函数调用结果组成的新数组。bind(this,index)的第二个参数index为原函数onDelete(index,e)省略掉的第一个参数。

好了,大功告成,让我们一起来看下效果吧…

基于React实现表单数据的添加和删除详解

添加效果

基于React实现表单数据的添加和删除详解

删除后效果

总结

好了,以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Javascript 相关文章推荐
jQuery滚动加载图片效果的实现
Mar 06 Javascript
Js制作简单弹出层DIV在页面居中 中间显示遮罩的具体方法
Aug 08 Javascript
js delete 用法(删除对象属性及变量)
Aug 24 Javascript
jquery实现从数组移除指定的值
Jun 24 Javascript
初识angular框架后的所思所想
Feb 19 Javascript
JS原型、原型链深入理解
Feb 27 Javascript
很棒的js选项卡切换效果
Jul 15 Javascript
JS中判断null的方法分析
Nov 21 Javascript
100多个基础常用JS函数和语法集合大全
Feb 16 Javascript
实例讲解vue源码架构
Jan 24 Javascript
微信小程序蓝牙连接小票打印机实例代码详解
Jun 03 Javascript
js实现点赞按钮功能的实例代码
Mar 06 Javascript
Node.js 中exports 和 module.exports 的区别
Mar 14 #Javascript
JS检测数组类型的方法小结
Mar 14 #Javascript
轻松理解JavaScript闭包
Mar 14 #Javascript
微信小程序 页面跳转及数据传递详解
Mar 14 #Javascript
JavaScript ES6中export、import与export default的用法和区别
Mar 14 #Javascript
微信小程序 动态绑定数据及动态事件处理
Mar 14 #Javascript
Vue 2.0+Vue-router构建一个简单的单页应用(附源码)
Mar 14 #Javascript
You might like
PHP学习之PHP运算符
2006/10/09 PHP
php引用计数器进行垃圾收集机制介绍
2012/09/19 PHP
php天翼开放平台短信发送接口实现方法
2014/12/22 PHP
thinkPHP使用pclzip打包备份mysql数据库的方法
2016/04/30 PHP
javascript 命名空间以提高代码重用性
2008/11/13 Javascript
JQUERY 对象与DOM对象之两者相互间的转换
2009/04/27 Javascript
传智播客学习之java 反射
2009/11/22 Javascript
一个简单的js动画效果代码
2010/07/20 Javascript
jQuery中使用Ajax获取JSON格式数据示例代码
2013/11/26 Javascript
javascript使用百度地图api和html5特性获取浏览器位置
2014/01/10 Javascript
js中自定义方法实现停留几秒sleep
2014/07/11 Javascript
小结Node.js中非阻塞IO和事件循环
2014/09/18 Javascript
JavaScript实现自动对页面上敏感词进行屏蔽的方法
2015/07/27 Javascript
表单验证正则表达式实例代码详解
2015/11/09 Javascript
学习JavaScript事件流和事件处理程序
2016/01/25 Javascript
JavaScript 五大常见函数
2018/03/23 Javascript
JavaScript数组特性与实践应用深入详解
2018/12/30 Javascript
Vue加载json文件的方法简单示例
2019/01/28 Javascript
Vue Extends 扩展选项用法完整实例
2019/09/17 Javascript
vue实现点击追加选中样式效果
2019/11/01 Javascript
微信小程序自定义弹出层效果
2020/05/26 Javascript
JavaScript中遍历的十种方法总结
2020/12/15 Javascript
Python基础篇之初识Python必看攻略
2016/06/23 Python
使用Python编写Prometheus监控的方法
2018/10/15 Python
Python求均值,方差,标准差的实例
2019/06/29 Python
python SVD压缩图像的实现代码
2019/11/05 Python
基于python获取本地时间并转换时间戳和日期格式
2020/10/27 Python
FORZIERI福喜利中国官网:奢侈品购物梦工厂
2019/05/03 全球购物
迅雷Cued工作心得体会
2014/01/27 职场文书
廉洁自律承诺书
2014/03/27 职场文书
入股协议书范本
2014/04/14 职场文书
志愿者爱心公益活动策划方案
2014/09/15 职场文书
故宫英文导游词
2015/01/31 职场文书
2015年卫生院健康教育工作总结
2015/07/24 职场文书
2016年暑期教师培训心得体会
2016/01/09 职场文书
nginx基于域名,端口,不同IP的虚拟主机设置的实现
2021/03/31 Servers