基于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 相关文章推荐
Moment.js 不容错过的超棒Javascript日期处理类库
Apr 15 Javascript
javascript异步编程代码书写规范Promise学习笔记
Feb 11 Javascript
浅谈javascript的分号的使用
May 12 Javascript
兼容各大浏览器的JavaScript阻止事件冒泡代码
Jul 09 Javascript
JS模仿编辑器实时改变文本框宽度和高度大小的方法
Aug 17 Javascript
jQuery实现向下滑出的平滑下拉菜单效果
Aug 21 Javascript
JavaScript代码轻松实现网页内容禁止复制(代码简单)
Oct 23 Javascript
基于javascript代码检测访问网页的浏览器呈现引擎、平台、Windows操作系统、移动设备和游戏系统
Dec 03 Javascript
在一个页面重复使用一个js函数的方法详解
Dec 26 Javascript
利用require.js与angular搭建spa应用的方法实例
Jul 19 Javascript
详解Webstorm 新建.vue文件支持高亮vue语法和es6语法
Oct 26 Javascript
玩转Koa之核心原理分析
Dec 29 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 高效率写法 推荐
2010/02/21 PHP
PHP快速导出百万级数据到CSV或者EXCEL文件
2020/11/27 PHP
javascript 读取xml,写入xml 实现代码
2009/07/10 Javascript
silverlight线程与基于事件驱动javascript引擎(实现轨迹回放功能)
2011/08/09 Javascript
Javascript设计模式理论与编程实战之简单工厂模式
2015/11/03 Javascript
基于node实现websocket协议
2016/04/25 Javascript
jQuery mobile在页面加载时添加加载中效果 document.ready 和window.onload执行顺序比较
2016/07/14 Javascript
防止Node.js中错误导致进程阻塞的办法
2016/08/11 Javascript
jQuery如何防止Ajax重复提交
2016/10/14 Javascript
Node.js中路径处理模块path详解
2016/11/14 Javascript
jQuery与JavaScript节点创建方法的对比
2016/11/18 Javascript
Javascript 引擎工作机制详解
2016/11/30 Javascript
JS验证input输入框(字母,数字,符号,中文)
2017/03/23 Javascript
vue-router 路由基础的详解
2017/10/17 Javascript
node文件批量重命名的方法示例
2017/10/23 Javascript
详解ES6中的三种异步解决方案
2018/06/28 Javascript
Python sqlite3事务处理方法实例分析
2017/06/19 Python
python实现本地图片转存并重命名的示例代码
2018/10/27 Python
PyCharm的设置方法和第一个Python程序的建立
2019/01/16 Python
Python实现的列表排序、反转操作示例
2019/03/13 Python
Python 矩阵转置的几种方法小结
2019/12/02 Python
Django自定义列表 models字段显示方式
2020/04/03 Python
python 对象真假值的实例(哪些视为False)
2020/12/11 Python
Canvas绘制浮动球效果的示例
2017/12/29 HTML / CSS
芝加哥牛排公司:Chicago Steak Company
2018/10/31 全球购物
某公司C#程序员面试题笔试题
2014/05/26 面试题
自荐信格式简述
2014/01/25 职场文书
医药个人求职信范文
2014/01/29 职场文书
心理健康课教学反思
2014/02/13 职场文书
大学生学习2014全国两会心得体会
2014/03/13 职场文书
2014审计局领导班子民主生活会对照检查材料思想汇报
2014/09/20 职场文书
怀孕辞职信怎么写
2015/02/28 职场文书
民间借贷纠纷答辩状
2015/08/03 职场文书
感恩主题班会教案
2015/08/12 职场文书
人生感悟经典句子
2019/08/20 职场文书
导游词之杭州西湖
2019/09/19 职场文书