今日分享:
React 双向数据绑定
表单处理
公共方法
表单
约束性和非约束性组件(受限/非受限)
<input type="text" value="123" />
//非约束性 value由原生的DOM管理
<input type="text" defaultValue="123" />
//约束性 由react管理了 value (value不再是死值,动态的处理)
<input type="text" value={this.state.value} />
非约束性公共表单封装
<!DOCTYPE html>
<html>
<head>
<title>公共</title>
<meta charset="UTF-8" />
<script src="../lib/react.development.js"></script>
<script src="../lib/react-dom.development.js"></script>
<script type="text/javascript" src="../lib/babel.min.js"></script>
</head>
<body>
<div id="my"></div>
<script type="text/babel">
class App extends React.Component {
constructor(){
super();
this.state ={
name:'',
psd:'',
phone:'',
}
}
handleChange(event){
var name = event.target.name
console.log("name-",name)
this.setState({
[name]:event.target.value
})
}
handleRadio(event){
// var male = event.target.value=='man'?true:false
this.setState({
male:event.target.value
})
}
handleSelect(event){
this.setState({
select:event.target.value
})
}
handleSubmit(){
console.log(this.state)
}
render(){
var arr = ['北京','上海','广东']
return (
<div>
<h1>约束性</h1>
<h1>{this.state.value}</h1>
<div>
<label>姓名:</label>
<input type="text" value={this.state.name} name="name" onChange={(event)=>{this.handleChange(event)}} />
</div>
<div>
<label>密码:</label>
<input type="password" value={this.state.psd} name="psd" onChange={(event)=>{this.handleChange(event)}} />
</div>
<div>
<label>手机号:</label>
<input type="text" value={this.state.phone} name="phone" onChange={(event)=>{this.handleChange(event)}} />
</div>
<div>
<button onClick={()=>{this.handleSubmit()}}>提交</button>
</div>
</div>
)
}
};
ReactDOM.render(
<App />,
document.getElementById("my")
);
</script>
</body>
</html>
注册表单验证封装
<!DOCTYPE html>
<html>
<head>
<title>注册</title>
<meta charset="UTF-8" />
<script src="../lib/react.development.js"></script>
<script src="../lib/react-dom.development.js"></script>
<script type="text/javascript" src="../lib/babel.min.js"></script>
</head>
<body>
<div id="my"></div>
<script type="text/babel">
class App extends React.Component {
constructor(){
super();
this.state ={
name:'',
psd:'',
phone:'',
male:'man',
select:'北京',
nameError:''
}
}
handleChange(event){
var name = event.target.name;
var value = event.target.value;
var filter = new RegExp(event.target.getAttribute('filter'));
var error = ''
if(!value){
error='不能为空'
}else if(!filter.test(value)){
error='格式不对'
}else{
error=''
}
this.setState({
[name]: event.target.value,
[name+'Error']: error
})
}
handleChange1(event){
var value = event.target.value
var filter = /^[\u4e00-\u9fa5]{2,4}$/
var error = ''
if(!value){
error='不能为空'
}else if(!filter.test(value)){
error='格式不对'
}else{
error=''
}
this.setState({
name:event.target.value,
nameError:error
})
}
handleRadio(event){
// var male = event.target.value=='man'?true:false
this.setState({
male:event.target.value
})
}
handleSelect(event){
this.setState({
select:event.target.value
})
}
handleSubmit(){
console.log(this.state)
}
render(){
var arr = ['北京','上海','广东']
return (
<div>
<h1>约束性</h1>
<h1>{this.state.value}</h1>
<div>
<label>姓名:</label>
<input type="text"
value={this.state.name} name="name"
onChange={(event)=>{this.handleChange1(event)}} />
<span>{this.state.nameError}</span>
</div>
<div>
<label>密码:</label>
<input type="password"
value={this.state.psd} name="psd"
filter="^[a-zA-Z0-9]\w{5,17}$"
onChange={(event)=>{this.handleChange(event)}} />
<span>{this.state.psdError}</span>
</div>
<div>
<label>手机号:</label>
<input type="text"
value={this.state.phone} name="phone"
filter="^(13[0-9]|15[0|8]|18[0-9])\d{8}$"
onChange={(event)=>{this.handleChange(event)}}
/>
<span>{this.state.phoneError}</span>
</div>
<div>
<label>性别:</label>
<input type="radio" name="male" checked={this.state.male=="man"?true:false} value="man" onChange={(event)=>{this.handleRadio(event)}} />男
<input type="radio" name="male" checked={this.state.male=="woman"?true:false} value="woman" onChange={(event)=>{this.handleRadio(event)}} />女
</div>
<select value={this.state.select} onChange={(event)=>{this.handleSelect(event)}}>
{
arr.map((item,index)=>{
return <option value={item} key={index}>{item}</option>
})
}
</select>
<div>
<button disabled={!this.state.name || this.state.nameError} onClick={()=>{this.handleSubmit()}}>注册</button>
</div>
</div>
)
}
};
ReactDOM.render(
<App />,
document.getElementById("my")
);
</script>
</body>
</html>