基于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 相关文章推荐
关于__defineGetter__ 和__defineSetter__的说明
May 12 Javascript
Jquery Ajax 学习实例2 向页面发出请求 返回JSon格式数据
Mar 15 Javascript
web的各种前端打印方法之jquery打印插件jqprint实现网页打印
Jan 09 Javascript
jQuery ajax调用WCF服务实例
Jul 16 Javascript
果断收藏9个Javascript代码高亮脚本
Jan 06 Javascript
深入理解AngularJS中的ng-bind-html指令和$sce服务
Sep 08 Javascript
Bootstrap 实现查询的完美方法
Oct 26 Javascript
JavaScript实现跟随滚动缓冲运动广告框
Jul 15 Javascript
vue判断input输入内容全是空格的方法
Mar 02 Javascript
使用Vue组件实现一个简单弹窗效果
Apr 23 Javascript
浅谈vue父子组件怎么传值
Jul 21 Javascript
15分钟深入了解JS继承分类、原理与用法
Jan 19 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创建动态图像
2006/10/09 PHP
phpStudy2016 配置多个域名期间遇到的问题小结
2017/10/19 PHP
PHP设计模式入门之状态模式原理与实现方法分析
2020/04/26 PHP
DOM相关内容速查手册
2007/02/07 Javascript
用一段js程序来实现动画功能
2007/03/06 Javascript
js中scrollHeight,scrollWidth,scrollLeft,scrolltop等差别介绍
2012/05/16 Javascript
js控制滚动条缓慢滚动到顶部实现代码
2013/03/20 Javascript
利用webqq协议使用python登录qq发消息源码参考
2013/04/08 Javascript
js中的事件捕捉模型与冒泡模型实例分析
2015/01/10 Javascript
微信小程序之GET请求的实例详解
2017/09/29 Javascript
详解Angular6学习笔记之主从组件
2018/09/05 Javascript
小程序云开发初探(小结)
2018/10/24 Javascript
如何在基于vue-cli的项目自定义打包环境
2018/11/10 Javascript
vue使用svg文件补充-svg放大缩小操作(使用d3.js)
2020/09/22 Javascript
[02:35]DOTA2英雄基础教程 狙击手
2014/01/14 DOTA
[01:06:26]全国守擂赛第二周 Team Coach vs DeMonsTer
2020/04/28 DOTA
Python 详解基本语法_函数_返回值
2017/01/22 Python
Python实现PS图像明亮度调整效果示例
2018/01/23 Python
Django中的Model操作表的实现
2018/07/24 Python
Windows下将Python文件打包成.EXE可执行文件的方法
2018/08/03 Python
完美解决python3.7 pip升级 拒绝访问问题
2019/07/12 Python
python用win32gui遍历窗口并设置窗口位置的方法
2019/07/26 Python
python画微信表情符的实例代码
2019/10/09 Python
使用pandas的box_plot去除异常值
2019/12/10 Python
Python使用sqlite3模块内置数据库
2020/05/07 Python
css3圆角样式分享自定义按钮样式
2013/12/27 HTML / CSS
使用iframe+postMessage实现页面跨域通信的示例代码
2020/01/14 HTML / CSS
Daniel Wellington官方海外旗舰店:丹尼尔惠灵顿DW手表
2018/02/22 全球购物
英国演唱会订票网站:Ticket Selection
2018/03/27 全球购物
YesBabyOnline美国:全球性的在线婚纱礼服工厂
2018/05/05 全球购物
什么是岗位职责
2013/11/12 职场文书
国庆促销活动总结
2014/08/29 职场文书
环卫工人节活动总结
2014/08/29 职场文书
基层党组织建设整改方案
2014/09/16 职场文书
2014年乡镇个人工作总结
2014/12/03 职场文书
2015小学师德工作总结
2015/07/21 职场文书