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;

  本章CSDN地址:https://blog.csdn.net/lastone1212/article/details/117364940

react中使用Input表单双向绑定方法的更多相关文章

  1. antd 表单双向绑定的研究

    痛点 在使用antd的表单时,大家觉得不够清爽,总结如下: 大量的模板语法,需要一定的学习成本. 需要手动地进行数据绑定,使用大量的onChange/setFieldsValue去控制数据. 无法通过 ...

  2. html表单-双向绑定

    潜水多年.一直是只看不评不写多年,每每看到各位大牛分享的经典文章都是默默的收藏,对大牛技术分享技术表示感谢,这么多年从博客园学到了很多. 这段时间项目告一段落. 正好这段时间相对清闲,我也整理一些常用 ...

  3. react Input 表单

    ​ input react 表单 input 密码框在谷歌浏览器下 会有黄色填充 官网的不太用,这个比较好用 type="password" autoComplete=" ...

  4. Vue的指令系统、计算属性和表单输入绑定

    指令系统 指令 (Directives) 是带有 v- 前缀的特殊特性.指令特性的值预期是单个 JavaScript 表达式 (v-for 是例外情况,稍后我们再讨论).指令的职责是,当表达式的值改变 ...

  5. 前端MVC Vue2学习总结(五)——表单输入绑定、组件

    一.表单输入绑定 1.1.基础用法 你可以用 v-model 指令在表单控件元素上创建双向数据绑定.它会根据控件类型自动选取正确的方法来更新元素.尽管有些神奇,但 v-model 本质上不过是语法糖, ...

  6. Vue.js教程--基础2(事件处理 表单输入绑定

    事件处理 表单输入绑定 事件处理 监听v-on 监听 DOM 事件,并在触发时运行一些 JavaScript 代码. 可以在v-on:click=''加内联语句. 有时也需要在内联语句处理器中访问原始 ...

  7. vue中如何实现数据的双向绑定

    vue中如何实现数据的双向绑定 实现视图变化数据跟着变:分两步,上面get中的为第二步(即再次读取的时候会调用get方法得到之前设置的值,以此来实现动态改变) 由于直接写obj.name = this ...

  8. vue - 计算属性、表单输入绑定

    计算属性 computed:{} <!DOCTYPE html> <html> <head> <title></title> </he ...

  9. Vue学习计划基础笔记(五) - 表单输入绑定、组件基础

    表单输入绑定.组件基础 目标: 熟练掌握vue中表单的处理方式 对之前学习的内容简单回顾一下,并写一个实例,学以致用(最好脱离文档) vue中表单的处理方式 vue中表单的处理使用了v-model指令 ...

随机推荐

  1. round函数和获取当前时间函数

    round函数:对一个浮点类型的数据进行四舍五入:round(3.14)   运行结果就是3 获取当前时间: time.time()    ,time函数需要导入才能使用,import time  

  2. C/C++ Qt 给ListWidget增加右键菜单

    在上一篇博文<C/C++ Qt ListWidget 列表框组件应用>中介绍了ListWidget组件的基本使用技巧,本次将给ListWidget组件增加一个右键菜单,当用户在ListWi ...

  3. 洛谷 P4900 - 食堂(推式子)

    洛谷题面传送门 首先推式子: \[\begin{aligned} ans&=\sum\limits_{i=A}^B\sum\limits_{j=1}^i\{\dfrac{i}{j}\} \en ...

  4. CF 585 E Present for Vitalik the Philatelist

    CF 585 E Present for Vitalik the Philatelist 我们假设 $ f(x) $ 表示与 $ x $ 互质的数的个数,$ s(x) $ 为 gcd 为 $ x $ ...

  5. Cycling City CF521E

    Cycling City 毒瘤题 首先建dfs树,由于是个无向图所有返祖边都是连向祖先的. 判是否有解其实很简单,只要图不是一个仙人掌就有解了. 仙人掌有关可以看这个博客 但是这道题由于要输出路径成功 ...

  6. git放弃修改,强制覆盖本地代码

    1.git fetch --all  //从远程拉取最新的代码 不merge 2.git reset --hard origin/develop  //使用指定分支的代码(此处develop)强制覆盖 ...

  7. 点击下拉选择触发事件【c#】

    <asp:DropDownList ID="ddlRegionList" runat="server" AutoPostBack="true&q ...

  8. C# / VB.NET 在Word中嵌入多媒体(视频、音频)文件

    Word中可将Office(Word/Excel/PowerPoint).PDF.txt等文件作为OLE对象插入到文档中,双击该对象可直接访问或编辑该文件,除了以上常见的文件格式对象,也可以插入多媒体 ...

  9. Qt最好用评价最高的是哪个版本?

    来源: http://www.qtcn.org/bbs/read-htm-tid-89455.html /// Qt4:    4.8.7      4.X 系列终结版本 Qt5 :   5.6 LT ...

  10. HTML5 之 FileReader 的使用 (网页上图片拖拽并且预显示可在这里学到) [转载]

    转载至 : http://www.360doc.com/content/14/0214/18/1457948_352511416.shtml FileReader 资料(英文) : https://d ...