react表单事件和取值
常见的表单包括输入框,单选框,复选框,下拉框和多文本框,本次主要总结它们在react中如何取值。
输入框
在之前有说过输入框,可以先给input框的value绑定一个值,然后通过input框的改变事件来获取用户输入的值,并将这个值赋值给value绑定的值,就可以实现数据的双向绑定了。


单选框
单选框,首先需要控制的单选框的是否选中,这里可以通过控制checked属性的值来控制当前单选框是否选中,改变checked的值就可以改变选中状态。其次,单选框也有onChange事件,可以通过onChange事件获取value的值。所以可以通过value值间接控制是否选中,但是onChange只能获取value值,不能改变,需要在中间添加一个过渡的变量。具体操作如下:


select下拉框
关于select,需要注意的有三点,首先是循环渲染option;其次是在之前的select中,value都是写在option上的,但是在在react中,对select进行了简单的封装,需要将value放在select中;最后就是通过select的onChange事件获取当前的选择情况。


复选框
和上面的单个值操作不同的是,复选框是对数组进行操作,既然是数组,就需要在onChange中获取当前操作项的索引,如果像下面这样写,就会因为this的指向不明而报错了。


这是因为,在正常情况下,我们希望this能指向当前react组件,这样就能在react组件中找到handelHobby事件了,但是因为使用了map进行循环,在map循环中,将this指向了window,因此找不到handelHobby了,解决办法就是使用箭头函数改变this指向了。


另外就是setState只能对数据整体进行操作,而不能直接对数组和对象的项进行操作,所以这里需要使用一个中间变量进行过度。
多文本框
多文本框就和input框是一样的了,只是能换行输入更多的内容而已。
下面贴出完整代码,需要说明的是,单页面中使用form的时候,要阻止form自带的提交刷新事件。

import React from 'react';
class Test extends React.Component{
constructor(props){
super(props);
this.state={
name:'',
sex:'1',
city:'',
citys:[
'北京','上海','深圳'
],
hobby:[
{'do':'吃饭','checked':true},
{'do':'睡觉','checked':false},
{'do':'打豆豆','checked':false},
],
info:''
}
this.handleInfo=this.handleInfo.bind(this);
}
handelSubmit=(e)=>{
e.preventDefault();
console.log(this.state.name,this.state.sex,this.state.city,this.state.hobby,this.state.info);
}
handelName=(e)=>{
this.setState({
name:e.target.value
})
}
handelSex=(e)=>{
this.setState({
sex:e.target.value
})
}
handelCity=(e)=>{
this.setState({
city:e.target.value
})
}
handelHobby=(key)=>{
var hobby=this.state.hobby;
hobby[key].checked=!hobby[key].checked;
this.setState({
hobby:hobby
})
}
handleInfo(e){
this.setState({
info:e.target.value
})
}
render(){
return(
<div>
<form onSubmit={this.handelSubmit}>
用户名:<input type="text" value={this.state.name} onChange={this.handelName} />
<br />
<br />
性别:<input type="radio" value="1" checked={this.state.sex==1} onChange={this.handelSex}/>男
<input type="radio" value="2" checked={this.state.sex==2} onChange={this.handelSex} />女
<br />
<br />
籍贯:
<select value={this.state.city} onChange={this.handelCity}>
{
this.state.citys.map(function(value,key){
return <option key={key}>{value}</option>
})
}
</select>
<br />
<br />
爱好:
{
this.state.hobby.map((value,key)=>{
return (
<span key={key}>
{value.do}
<input type="checkbox" checked={value.checked} onChange={this.handelHobby.bind(this,key)}/>
</span>
)
})
}
<br />
<br/>
备注:<textarea vlaue={this.state.info} onChange={this.handleInfo} />
<br/>
<br/>
<input type="submit" defaultValue="提交"/>
</form>
</div>
)
}
}
export default Test;
react表单事件和取值的更多相关文章
- React 事件对象、键盘事件、表单事件、ref获取dom节点、react实现类似Vue双向数据绑定
1.案例实现代码 import React, { Component } from 'react'; /** * 事件对象.键盘事件.表单事件.ref获取dom节点.react实现类似Vue双向数据绑 ...
- 六、React 键盘事件 表单事件 事件对象以及React中的ref获取dom节点 、React实现类似Vue的双向数据绑定
接:https://www.cnblogs.com/chenxi188/p/11782349.html 事件对象 .键盘事件. 表单事件 .ref获取dom节点.React实现类似vue双向数据绑定 ...
- React技巧之表单提交获取input值
正文从这开始~ 总览 在React中,通过表单提交获得input的值: 在state变量中存储输入控件的值. 在form表单上设置onSubmit属性. 在handleSubmit函数中访问输入控件的 ...
- 七、React表单详解 约束性和非约束性组件 input text checkbox radio select textarea 以及获取表单的内容
一.约束性和非约束性组件: 非约束性组: MV: <input type="text" defaultValue="a" /> 这个 default ...
- oninput等表单事件
oninput等表单事件 过去我们常使用keydown和keyup辅助表单元素的处理,这要求处理时,表单元素必须处于激活(聚焦)状态.oninput事件可以实时监听文本框的输入变化. 现代浏览器支 ...
- sbadmin表单事件
Form表单 自定义表单 <from action="" method="'><!--- 这里可以用表单组件快速生成表单元素哦 ...
- (96)Wangdao.com_第二十九天_表单事件
表单事件 input 事件 select 事件 change 事件 invalid 事件 reset 事件 submit 事件 ...
- javascript中的常用表单事件用法
下面介绍几种javascript中常用的表单事件: 一,onsubmit:表单中的确认按钮被点击时发生的事件,如下案例. 案例解析:弹出表单中提交的内容 <form name="tes ...
- jQuery-3.事件篇---表单事件
jQuery表单事件之blur与focus事件 在之前2.8与2.9节我们学过了表单处理事件focusin事件与focusout事件,同样用于处理表单焦点的事件还有blur与focus事件 它们之间的 ...
随机推荐
- Blender节点笔记
Blender节点笔记实现复杂材质,纹理的更直观的方式就是使用节点功能. 每个节点左边作为输入,右边作为输出.节点之间通过传递值影响后者.传递的值为(Scalars,Vectors)标量与矢量.二维矢 ...
- 【java编程】String拼接效率探究
转载:https://maimai.cn/article/detail?fid=1139790318&efid=0-ey6pWIySdmkx82QO-OSw 字符串,是Java中最常用的一个数 ...
- 我对 前端 Js 开发方式 架构方向 的 一些看法
有 网友 提到 : “复杂的页面,一个页面加载的模块多,各种异步请求,页面渲染,jquery链式编程操作dom数过于频繁.现在的前台越来越复杂,逻辑臃肿.” 哎, 所以 我说, 要改成用 同步调用 . ...
- 谈谈 SOA
为什么要 讨论 SOA 呢 ? 请参考我写的另一篇文章 <论 微服务 和 Entity Framework 对 数据 的 割裂> https://www.cnblogs.com/KS ...
- mysql重复start stop slave测试
如题,测试重复start slave, stop slave是否会有报错. 版本 5.7.21 重复start slave测试 第一次start >start slave; Query OK, ...
- MapReduce案例:统计共同好友+订单表多表合并+求每个订单中最贵的商品
案例三: 统计共同好友 任务需求: 如下的文本, A:B,C,D,F,E,OB:A,C,E,KC:F,A,D,ID:A,E,F,LE:B,C,D,M,LF:A,B,C,D,E,O,MG:A,C,D,E ...
- FFMPEG Qt视频播放器
本文是根据PaintEvent事件处理函数不停在组件中绘制视频帧数据 做过图像界面开发的都知道,任何耗时的操作都不能放在主线程进行,一旦主线程阻塞了,那么体现出来的就是界面卡了. 而我们读取视频和解码 ...
- java实现文件的上传和下载
1. servlet 如何实现文件的上传和下载? 1.1上传文件 参考自:http://blog.csdn.net/hzc543806053/article/details/7524491 通过前台选 ...
- Sql语句的优化摘要
1.应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描. 2.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉 ...
- linux找不到动态链接库 .so文件的解决方法
linux找不到动态链接库 .so文件的解决方法 如果使用自己手动生成的动态链接库.so文件,但是这个.so文件,没有加入库文件搜索路劲中,程序运行时可能会出现找不到动态链接库的情形. 可以通过ldd ...