React 第三节 向数据绑定及表单处理

今日分享:
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>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值