react 表单
根据react的示例,要取得受限组建的值,可以采用下面的方法:
import React ,{PropTypes}from 'react';
import { render } from 'react-dom';
const styles={
mb10:{
marginBottom:'15px'
},
w200:{
width:'200px',
}
}
class test extends React.Component{
constructor(props){
super();//和react没什么关系,javascript的特性,用于访问父对象上的函数。
this.state={
uName:'',
choose:'1',//==>设置默认值
gender:'Male',//==>设置默认值
city:{
cd:false,
bj:true,
sh:true
},
desc:'',
}
};
nameChange = (event)=> {
this.setState({
uName:event.target.value
});
};
chooseChange = (event) =>{
this.setState({
choose:event.target.value
});
console.log(event.target.value)//==>立即打印值
};
handleGenderChange = (e) => {
this.setState({
gender: e.target.value
});
};
cityChang = (event) => {
const value = event.target.value;
const city = Object.assign({}, this.state.city);
city[value] = !city[value];
this.setState({
city: city
});
};
descChange = (e) => {
this.setState({
desc:e.target.value
})
};
formSubmit = () => {
console.log(this.state)//打印全部
console.log('uName是:'+this.state.uName)
console.log("select值是:"+this.state.choose)
console.log("radio值是:"+this.state.gender)
console.log("选择的城市是:"+ Object.keys(this.state.city).filter(item => this.state.city[item]).join(','))
console.log("文本域内容是:"+this.state.desc)
};
render(){
const selectList=[
{value:'1',lable:'选择1'},
{value:'2',lable:'选择2'},
{value:'3',lable:'选择3'},
{value:'4',lable:'选择4'},
{value:'5',lable:'选择5'},
{value:'6',lable:'选择6'}
]
return(
<div>
<div>
<div style={styles.mb10}>
姓名:
<input type="text" name="uName" value={this.state.uName} onChange={this.nameChange}/>
<span>{this.state.nameError}</span>
</div>
<div style={styles.mb10}>
下拉框:
<select style={styles.w200} name="choose" value={this.state.choose} onChange={this.chooseChange}>
{selectList.map((list,index)=>(
<option value={list.value} key={index}>{list.lable}</option>
))}
</select>
</div>
<div style={styles.mb10}>
单选框:
<input type="radio" name="gender" value="Male" onChange={ this.handleGenderChange } checked={ this.state.gender === 'Male' } />
男
<input type="radio" name="gender" value="Female" onChange={ this.handleGenderChange } checked={ this.state.gender === 'Female' } />
女
</div>
<div style={styles.mb10}>
复选框:
<input name="city" type="checkbox" value="cd" onChange={this.cityChang} checked={this.state.city.cd}/>成都
<input name="city" type="checkbox" value="bj" onChange={this.cityChang} checked={this.state.city.bj}/>北京
<input name="city" type="checkbox" value="sh" onChange={this.cityChang} checked={this.state.city.sh}/>上海
</div>
<div style={styles.mb10}>
文本域:
<textarea name="desc" value={this.state.desc} onChange={this.descChange}>
</textarea>
</div>
<input type="button" value="提交表单" onClick={this.formSubmit} />
</div>
</div>
)
}
}
export default test;
测试打印值如下:

上面这种方法,是可以实现需求,但是当表单字段很多的时候,就比较尴尬了。不过有方法可以简写代码。
把onChange事件修改成一个,如下:
handleChange = (e) => {
this.setState({
[e.target.name]:e.target.value
})
console.log(e.target.value)//==>调试打印值
};
dom部分也就要把onChange绑定的事件都改成这个,如下:(注意name和value的命名,与this.state中的保持一致)
<div style={styles.mb10}>
姓名:
<input type="text" name="uName" value={this.state.uName} onChange={this.handleChange}/>
<span>{this.state.nameError}</span>
</div>
<div style={styles.mb10}>
下拉框:
<select style={styles.w200} name="choose" value={this.state.choose} onChange={this.handleChange}>
{selectList.map((list,index)=>(
<option value={list.value} key={index}>{list.lable}</option>
))}
</select>
</div>
<div style={styles.mb10}>
单选框:
<input type="radio" name="gender" value="Male" onChange={ this.handleChange } checked={ this.state.gender === 'Male' } />
男
<input type="radio" name="gender" value="Female" onChange={ this.handleChange } checked={ this.state.gender === 'Female' } />
女
</div>
<div style={styles.mb10}>
文本域:
<textarea name="desc" value={this.state.desc} onChange={this.handleChange}>
</textarea>
</div>
这种方法已经相对减少代码量了,但是CheckBox不能使用这种方法,CheckBox要单独写一个onChange事件,示例如第一段代码中的this.cityChang事件。
也可以使用react-compontent的form 可以大大简化代码。
https://github.com/react-component/form
关于箭头函数
以上示例使用箭头函数。
若函数是下面这种写法:
handleChange(e) {
this.setState({
[e.target.name]:e.target.value
})
console.log(e.target.value)//==>调试打印值
};
那么就要修改下constructor,加上bind,否则有this指向问题,会出现:'setState' of undefined错误
constructor(props){
super();//和react没什么关系,javascript的特性,用于访问父对象上的函数。
this.state={
uName:'',
choose:'1',//==>设置默认值
gender:'Male',//==>设置默认值
city:{
cd:false,
bj:true,
sh:true
},
desc:'',
};
this.handleChange=this.handleChange.bind(this);
};
更推荐这种写法,效率高于箭头函数。
react 表单的更多相关文章
- react 表单获取多个input
react 表单this.handleChange(key,e){ [key]:e.target.value} submit=()=>{ const {userName,age,status} ...
- 七、React表单详解 约束性和非约束性组件 input text checkbox radio select textarea 以及获取表单的内容
一.约束性和非约束性组件: 非约束性组: MV: <input type="text" defaultValue="a" /> 这个 default ...
- React表单元素的使用
一. <!DOCTYPE html> <html lang="zh-cn"> <head> <meta charset="UTF ...
- 翻译 | 玩转 React 表单 —— 受控组件详解
原文地址:React.js Forms: Controlled Components 原文作者:Loren Stewart 译者:小 B0Y 校对者:珂珂君 本文涵盖以下受控组件: 文本输入框 数字输 ...
- 6. React 表单使用介绍
表单是前端页面中非常重要也是非常常用的一个内容,react 也在表单方面进行了很多封装,让开发者可以方便快捷地在 react 组件中使用表单.下面介绍如何在组件中正确的使用表单,从而可 ...
- react表单事件和取值
常见的表单包括输入框,单选框,复选框,下拉框和多文本框,本次主要总结它们在react中如何取值. 输入框 在之前有说过输入框,可以先给input框的value绑定一个值,然后通过input框的改变事件 ...
- React 表单组件
诸如 <input>.<textarea>.<option> 这样的表单组件不同于其他组件,因为他们可以通过用户交互发生变化.这些组件提供的界面使响应用户交互的表单 ...
- [转]React表单无法输入原因----约束性和非约束性组件
转自:http://blog.csdn.net/lihongxun945/article/details/46730835 表单是前端非常重要的一块内容,并且往往包含了错误校验等逻辑. React对表 ...
- [原创]react-vio-form 快速构建React表单应用
react-vio-form 是一个react的快速轻量表单库,能快速实现表单构建.提供自定义表单格式.表单校验.表单信息反馈.表单信息隔离等功能.可采用组件声明或者API的形式来实现表单的功能 de ...
随机推荐
- 从零开始学 Java - Spring 集成 Memcached 缓存配置(一)
硬盘和内存的作用是什么 硬盘的作用毫无疑问我们大家都清楚,不就是用来存储数据文件的么?如照片.视频.各种文档或等等,肯定也有你喜欢的某位岛国老师的动作片,这个时候无论我们电脑是否关机重启它们永远在那里 ...
- SQLServer2005+获取表结构信息
SELECT d.name TableName, a.colorder FieldNo,a.name FieldName, (case when COLUMNPROPERTY( a.id,a.name ...
- IE7,6与Fireofx的CSS兼容性处理方法集结
CSS对浏览器的兼容性有时让人很头疼,尤其是对于IE6这个问题多多的浏览器版本,从网上收集了IE7,6与Fireofx的兼容性处理方法并整理了一下.对于web2.0的过度,请尽量用xhtml格式写代码 ...
- 移动站适配rel=alternate PC页和H5页适配标注
鉴于移动化大潮的汹涌和H5页的炫丽普及,百度针对PC页与H5页的跳转适配方式推出了最优方案:1.在pc版网页上,添加指向对应移动版网址的特殊链接rel="alternate"标记, ...
- 很强大的HTML+CSS+JS面试题(附带答案)
一.单项选择(165题) 1.HTML是什么意思? A)高级文本语言 B)超文本标记语言 C)扩展标记语言 D)图形化标记语言 2.浏览器针对于HTML文档起到了什么作用? A)浏览器用于创建HTML ...
- 分别用ToolBar和自定义导航栏实现沉浸式状态栏
一.ToolBar 1.在build.gradle中添加依赖,例如: compile 'com.android.support:appcompat-v7:23.4.0' 2.去掉应用的ActionBa ...
- IOS 杂笔-11(实现在外部无法改变UIView的size)
我想题目说的或许不是很清楚,那么现在我详细介绍一下这篇随笔内容. 在外部无法改变UIVIew控件的size. 这里说是UIView,但是事实上,是大多数控件而绝非仅UIView. 想要实现在外部无法改 ...
- 详解java定时任务
在我们编程过程中如果需要执行一些简单的定时任务,无须做复杂的控制,我们可以考虑使用JDK中的Timer定时任务来实现.下面LZ就其原理.实例以及Timer缺陷三个方面来解析JavaTimer定时器. ...
- 【译】Spring 4 Hello World例子
前言 译文链接:http://websystique.com/spring/spring-4-hello-world-example-annotation-tutorial-full-example/ ...
- SE Springer小组之《Spring音乐播放器》可行性研究报告三、四
3 对现有系统的分析 由于本次可行性分析主要是建立在团队自行实现一个音乐软件的目标上,并不是在一个现有系统的基础上开发改进的新系统.因此这里将分析一款市面上已经存在的音乐软件(以下称为W音乐),并为之 ...