react Input 表单
input react 表单
input 密码框在谷歌浏览器下 会有黄色填充 官网的不太用,这个比较好用
type="password" autoComplete="new-password"
HTML
index.jsx
import React, { Component } from 'react';
import { NavLink} from 'react-router-dom';
// import Checkbox from './checkbox.jsx';
// import AllCheck from './allcheck.jsx';
// import All from './all.jsx';
import All1 from './all1.jsx';
class View extends Component{
constructor(props){
super(props);
this.state = {
name:'',
year:'',
comp:'',
exp:{
year:'',
comp:'',
job:'',
},
resume:{
base:{
name:'',
age:'',
genders:'male'
},
exp:{
year:'',
comp:'',
job:'',
detail:'',
area:'lime'
}
}
}
}
// 单个input
handleChange(e){
// 获取 input 元素上的value
let value = e.target.value;
this.setState({
name:value
})
}
// 多个input
_handleChange(e){
// 获取 input 元素上的value
let name = e.target.name;
let value = e.target.value;
this.setState({
[name]:value
})
}
// 多个input exp
__handleChange(e){
// 获取 input 元素上的value
let name = e.target.name;
let value = e.target.value;
const exp = this.state.exp;
// year exp.year = value
// comp exp.comp = value
// job exp.job = value
exp[name] = value;
this.setState({exp})
}
// 多个input exp
___handleChange(e){
// 获取 input 元素上的value
let name = e.target.name;
let value = e.target.value;
const resume = this.state.resume;
const namekey = e.target.getAttribute('namekey');
// resume.base.name = name;
// resume.base.age = age;
// resume.exp.job = job;
resume[namekey][name] = value;
this.setState({resume})
/**
第一步
设置state 默认值
第二步
写jsx 中 input
value
onChange
如果多input 或深层次
增加name属性
如果多个input 较深层次
除了 增加默认的name 还需自定义一个namekey
第三步
在onChange 方法中定义setState
SP
对象的[]用法与场景
作业
1、实现checkbox
2、正选 反选
**/
}
render(){
return (
<div className="input_con">
<NavLink to="/">首页</NavLink><br/>
<NavLink to="/input">表单</NavLink><br/>
<NavLink to="/event">事件</NavLink><br/>
<NavLink to="/tab">tab</NavLink>
<h2>input 表单课</h2>
<ul>
<li>用户名:{this.state.name}</li>
<li>
<label>用户名</label>
<div className="lable_ctrl">
<input type="text" value={this.state.name}
placeholder="请输入用户名" onChange={(e)=>this.handleChange(e)}/>
</div>
</li>
</ul>
<ul>
<li>工作年限:{this.state.year}</li>
<li>
<label>工作年限</label>
<div className="lable_ctrl">
<input type="text" name="year" value={this.state.year}
placeholder="请输入工作年限" onChange={(e)=>this._handleChange(e)}/>
</div>
</li>
<li>公司名称:{this.state.comp}</li>
<li>
<label>公司名称</label>
<div className="lable_ctrl">
<input type="text" name="comp" value={this.state.comp}
placeholder="请输入公司名称" onChange={(e)=>this._handleChange(e)}/>
</div>
</li>
</ul>
<ul>
<li>工作年限:{this.state.exp.year}</li>
<li>
<label>工作年限</label>
<div className="lable_ctrl">
<input type="text" name="year" value={this.state.exp.year}
placeholder="请输入工作年限" onChange={(e)=>this.__handleChange(e)}/>
</div>
</li>
<li>工作年限:{this.state.exp.comp}</li>
<li>
<label>公司名称</label>
<div className="lable_ctrl">
<input type="text" name="comp" value={this.state.exp.comp}
placeholder="请输入公司名称" onChange={(e)=>this.__handleChange(e)}/>
</div>
</li>
<li>工作职责:{this.state.exp.job}</li>
<li>
<label>工作职责</label>
<div className="lable_ctrl">
<input type="text" name="job" value={this.state.exp.job}
placeholder="请输入工作职责" onChange={(e)=>this.__handleChange(e)}/>
</div>
</li>
</ul>
<h2>resume</h2>
<ul>
<li>姓名:{this.state.resume.base.name}</li>
<li>
<label>姓名</label>
<div className="lable_ctrl">
<input type="text" name="name" namekey="base" value={this.state.resume.base.name}
placeholder="请输入姓名" onChange={(e)=>this.___handleChange(e)}/>
</div>
</li>
<li>年龄:{this.state.resume.base.age}</li>
<li>
<label>年龄</label>
<div className="lable_ctrl">
<input type="text" name="age" namekey="base" value={this.state.resume.base.age}
placeholder="请输入年龄" onChange={(e)=>this.___handleChange(e)}/>
</div>
</li>
<li>工作职责:{this.state.resume.exp.job}</li>
<li>
<label>工作职责</label>
<div className="lable_ctrl">
<input type="text" name="job" namekey="exp" value={this.state.resume.exp.job}
placeholder="请输入工作职责" onChange={(e)=>this.___handleChange(e)}/>
</div>
</li>
<li>工作详情:{this.state.resume.exp.detail}</li>
<li>
<label>工作详情</label>
<div className="lable_ctrl">
<textarea name="detail" namekey="exp" value={this.state.resume.exp.detail} onChange={(e)=>this.___handleChange(e)}></textarea>
</div>
</li>
<li>手机号的区号:{this.state.resume.exp.area}</li>
<li>
<label>手机号的区号</label>
<div className="lable_ctrl">
<select name="area" namekey="exp" defaultValue={this.state.resume.exp.area} onChange={(e)=>this.___handleChange(e)}>
<option value="grapefruit">葡萄柚</option>
<option value="lime">酸橙</option>
<option value="coconut">椰子</option>
<option value="mango">芒果</option>
</select>
</div>
</li>
<li>性别:{this.state.resume.base.genders}</li>
<li>
<label>性别</label>
<div className="lable_ctrl">
<label>男<input type="radio" name="genders" namekey="base" value="male" onClick={(e)=>this.___handleChange(e)} defaultChecked={this.state.resume.base.genders==='male'}/></label>
<label htmlFor="gender">女</label><input name="genders" namekey="base" value="female" id="gender" type="radio" defaultChecked={this.state.resume.base.genders==='female'} onClick={(e)=>this.___handleChange(e)}/>
</div>
</li>
</ul>
<All1/>
</div>
)
}
}
export default View;
React JSX
all1.jsx
import React , { Component } from 'react';
class View extends Component {
constructor(props){
super(props);
this.state = {
isGoing:false,
checkNode:[
{checked:false,name:"Vue"},
{checked:false,name:"React"},
{checked:false,name:"Angular"},
{checked:false,name:"Ember"},
{checked:false,name:"Omi"},
]
}
}
handleInputChange(e){
let checked = e.target.checked;
let name = e.target.name;
if(checked){
this.state.checkNode.forEach(v=>{
v.checked = true;
})
}else {
const obj = this.state.checkNode;
for(let index in obj){
obj[index].checked = false;
}
}
this.setState({
[name]:checked
})
}
handleChange(e,key){
const checkNode = this.state.checkNode;
checkNode[key].checked = !checkNode[key].checked
// this.state.checkNode[0].checked
let bTrue = true;
for(let i=0,len=checkNode.length;i<len;i++){
if(!checkNode[i].checked){
bTrue = false;
break;
}
}
this.setState({
isGoing:bTrue,
checkNode
})
}
render(){
// console.log(this.state.isGoing)
const checkList = this.state.checkNode.map((val,key)=>(
<p key={key}>
<input type="checkbox"
checked={val.checked}
onChange={(e)=>this.handleChange(e,key)}
/>
<label>{val.name}</label>
</p>
))
return(
<div>
<h2>今天要讲checkbox 的demo</h2>
<input
name="isGoing"
type="checkbox"
checked={this.state.isGoing}
onChange={(e)=>this.handleInputChange(e)} />
{checkList}
</div>
)
}
}
export default View;

react Input 表单的更多相关文章
- react中使用Input表单双向绑定方法
input react 表单 input 密码框在谷歌浏览器下 会有黄色填充 官网的不太用,这个比较好用 type="password" autoComplete="ne ...
- React之表单
第一部分:表单基础 在React中,修改表单的唯一途径是使用setState方法.举例如下: class NameForm extends React.Component { constructor( ...
- 兼容IE8以下浏览器input表单属性placeholder不能智能提示功能
当前很多表单提示使用了表单属性placeholder,可这属性不兼容IE8以下的浏览器,我自己写了一个兼容处理js // 兼容IE8以下浏览器input不能智能提示功能 if(navigator.ap ...
- 不让input表单的输入框保存用户输入的历史记录
如何不让input表单的输入框保存用户输入的历史记录. 有时我们在设计网页时不想让表单保存用户输入历史记录,比如一些隐私数据,或一些冲值卡 <input name="test&quo ...
- input type类型和input表单属性
一.input type类型 1.Input 类型 - email 在提交表单时,会自动验证 email 域的值. E-mail: <input type="email" n ...
- css修改input表单默认样式重置与自定义大全
链接地址: 伪元素表单控件默认样式重置与自定义大全 http://www.zhangxinxu.com/wordpress/?p=3381 Chrome 现在不支持通过伪元素修改 meter 元素样式 ...
- JavaWeb后台从input表单获取文本值的两种方式
JavaWeb后台从input表单获取文本值的两种方式 #### index.html <!DOCTYPE html> <html lang="en"> & ...
- 解决chrome浏览器对于自动填充的input表单添加的默认的淡黄色背景问题 && 一般的浏览器input和button的高度不一致问题
解决chrome浏览器对于自动填充的input表单添加的默认的淡黄色背景问题 如果我们把一个表单设置位 autofocus ,这时这个表单在获取焦点后就会产生淡黄色的背景,我们就是使用!importa ...
- 让input表单输入框不记录输入过信息的方法
有过表单设计经验的朋友肯定知道,当我们在浏览器中输入表单信息的时候,往往input文本输入框会记录下之前提交表单的信息,以后每次只要双击input文本输入框就会出现之前输入的文本,这样有时会觉得比较方 ...
随机推荐
- PHP 日期详细介绍
简介 你可以使用这些函数获取运行 PHP 的服务器的日期和时间, 也可以使用这些函数把日期和时间 格式化成不同格式的字符串. 日期和时间信息在 PHP 内部是以 64 位数字存储的, 它可以覆盖当前时 ...
- C/C++ Qt TabWidget 实现多窗体创建
在开发窗体应用时通常会伴随分页,ToolBar组件可以实现顶部工具栏菜单,每一个ToolBar组件关联到一个TabWidget组件的Tab标签内,这样我们就可以实现一个复杂的多窗体分页结构,此类结构也 ...
- [R]在dplyr基础上编写函数-(1)eval
tidyverse系列的R包虽然解放了大家的双手,但同时也束缚了我们重新编写函数的能力.在这一套语法中,要实现作为函数参数的字符串和变量之间的相互转换困难重重,但只要掌握了其中原理后,也就能够游刃有余 ...
- GATK4.1 call SNP
GATK4.0 和之前的版本相比还是有较大的不同,更加趋于流程化. 软件安装 1 wget https://github.com/broadinstitute/gatk/releases/downlo ...
- 8核cpu,,负载
今天有一个电话面试,面试官问我:CentOS怎么查看CPU负载?我说:看top的第一行有load average.面试官又问:为什么从这就判定是负载高呢?依据是什么呢?然后... 然后我就尴尬了,挂了 ...
- mysql 间隙锁专题
本文研究记录mysql间隙锁,涉及以下情况 唯一索引 非唯一索引 范围更新 等值更新 mysql8 mysql7 RR RC 数据准备 mysql> select * from vodb.tes ...
- minSdkVersion、targetSdkVersion、targetApiLevel的区别
在AndroidMenifest.xml中,常常会有下面的语句: <uses-sdk android:minSdkVersion="4" android:targetSdk ...
- redis 之 哨兵
#:编译安装redis4.0 [root@master ~]# tar xf redis-4.0.14.tar.gz [root@master ~]# cd redis-4.0.14/ [root@m ...
- Dubbo管控平台
2019年初,官方发布了Dubbo管理控制台0.1版本.结构上采取了前后端分离的方式,前端使用Vue和Vuetify分别作为Javascript框架和UI框架,后端采用Spring Boot框架 一. ...
- shell条件测试语句实例-测试apache是否开启
终于理解了shell条件测试语句"!="和"-n"的用法区别,于是有了如下的shell脚本,做为练习. 第一种方法:测试apache是否开启?字符串测试 #!/ ...