基于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 相关文章推荐
User Scripts: Video Download by User Scripts
May 14 Javascript
jQuery 性能优化手册 推荐
Feb 23 Javascript
jQuery中 noConflict() 方法使用
Apr 25 Javascript
在JavaScript中操作时间之getYear()方法的使用教程
Jun 11 Javascript
jquery 实现输入邮箱时自动补全下拉提示功能
Oct 04 Javascript
javascript实现右侧弹出“分享到”窗口效果
Feb 01 Javascript
three.js实现3D视野缩放效果
Nov 16 Javascript
浅谈vue项目优化之页面的按需加载(vue+webpack)
Dec 11 Javascript
详解mpvue小程序中怎么引入iconfont字体图标
Oct 01 Javascript
JavaScript的console命令使用实例
Dec 03 Javascript
JS实现商品橱窗特效
Jan 09 Javascript
JavaScript字符和ASCII实现互相转换
Jun 03 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表单提交与$_POST实例分析
2015/01/26 PHP
微信公众平台DEMO(PHP)
2016/05/04 PHP
PHP常用的三种设计模式
2017/02/17 PHP
javascript css styleFloat和cssFloat
2010/03/15 Javascript
关于锚点跳转及jQuery下相关操作与插件
2012/10/01 Javascript
自己写了一个展开和收起的多更能型的js效果
2013/03/05 Javascript
JS常用函数使用指南
2014/11/23 Javascript
jQuery使用append在html元素后同时添加多项内容的方法
2015/03/26 Javascript
Javascript 5种方法实现过滤删除前后所有空格
2016/06/22 Javascript
14 个折磨人的 JavaScript 面试题
2016/08/08 Javascript
基于Marquee.js插件实现的跑马灯效果示例
2017/01/25 Javascript
js实现上下左右弹框划出效果
2017/03/08 Javascript
Vue.directive()的用法和实例详解
2018/03/04 Javascript
深入了解响应式React Native Echarts组件
2019/05/29 Javascript
ES6中异步对象Promise用法详解
2019/07/31 Javascript
jquery css实现流程进度条
2020/03/26 jQuery
Vue+Java 通过websocket实现服务器与客户端双向通信操作
2020/09/22 Javascript
python实现简单socket程序在两台电脑之间传输消息的方法
2015/03/13 Python
探索Python3.4中新引入的asyncio模块
2015/04/08 Python
Python开发如何在ubuntu 15.10 上配置vim
2016/01/25 Python
Python缩进和冒号详解
2016/06/01 Python
分享Python开发中要注意的十个小贴士
2016/08/30 Python
在PyCharm环境中使用Jupyter Notebook的两种方法总结
2018/05/24 Python
Python pygorithm模块用法示例【常见算法测试】
2018/08/16 Python
Python批量生成特定尺寸图片及图画任意文字的实例
2019/01/30 Python
详解Python Qt的窗体开发的基本操作
2019/07/14 Python
详解Java中一维、二维数组在内存中的结构
2021/02/11 Python
利用纯CSS3实现动态的自行车特效源码
2017/01/20 HTML / CSS
HTML5 Video标签的属性、方法和事件汇总介绍
2015/04/24 HTML / CSS
英国打印机墨水和碳粉商店:Printerinks
2017/06/30 全球购物
捷克鲜花配送:Florea.cz
2018/10/29 全球购物
八年级历史教学反思
2014/01/10 职场文书
清明节网上祭英烈活动总结
2014/04/30 职场文书
教你用Java Swing实现自助取款机系统
2021/06/11 Java/Android
golang 实用库gotable的具体使用
2021/07/01 Golang
《王国之心》迎来了发售的20周年, 野村哲发布贺图
2022/04/11 其他游戏