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 ...
随机推荐
- 关于XHR对象中status范围的记录
if(xhr.status >= 200 && xhr.status < 300 || xhr.status == 304){ // 成功执行区域 // 2XX表示有效响应 ...
- AlloyRenderingEngine继承
写在前面 不读文章,只对代码感兴趣可以直接跳转到这里 https://github.com/AlloyTeam/AlloyGameEngine然后star一下,多谢支持:). 前几天发了篇向ES6靠齐 ...
- 自己写的HTML5 Canvas + Javascript五子棋
看到一些曾经只会灌水的网友,在学习了前端之后,已经能写出下载量几千几万的脚本.样式,帮助大众,成为受欢迎的人,感觉满羡慕的.我也想学会前端技术,变得受欢迎呀.于是心血来潮,开始学习前端知识,并写下了这 ...
- Android 5.X新特性之为RecyclerView添加下拉刷新和上拉加载及SwipeRefreshLayout实现原理
RecyclerView已经写过两篇文章了,分别是Android 5.X新特性之RecyclerView基本解析及无限复用 和 Android 5.X新特性之为RecyclerView添加Header ...
- java 执行 jar 包中的 main 方法
java 执行 jar 包中的 main 方法 通过 OneJar 或 Maven 打包后 jar 文件,用命令: java -jar ****.jar执行后总是运行指定的主方法,如果 jar 中有多 ...
- Apache的详细安装教程和遇到的问题解决方案
Apache是世界使用排名第一的Web服务器软件.它可以运行在几乎所有广泛使用的计算机平台上,由于其跨平台和安全性被广泛使用,是最流行的Web服务器端软件之一 (一)Apache安装软件下载 1.访问 ...
- mysql笔记
查看当前版本: SELECT VERSION(); 查看当前时间: SELECT NOW(); 查看当前当前用户: SELECT USER(); 创建数据库:CREATE DATABASE 数据库名字 ...
- laravel框架中容器类简化代码-摘自某书
<?php //容器类装实例或提供实例的回调函数 class Container { protected $bindings = []; //绑定接口和生成相应实例的回调函数 public fu ...
- 安卓gridview 网格,多行多列实现
主Activity() private int[] image = { R.drawable.camera, R.drawable.wifi, R.drawable.temperature, R.dr ...
- 解决Ubuntu下Firefox+OpenJDK没有Java插件的问题
如果是安装的OpenJDK,很遗憾它是没有libnpjp2.so的. 此时按照网上各种奇怪的方法都挣扎无效,但可以用icedtea插件来解决这个问题. icedtea的版本与本机安装的OpenJDK版 ...