04-表单详解(一)——input、select和textarea处理方式一样& radio & checkbox & 非受控组件-类似于Vue中ref-实际上就是直接操作DOM

表单详解——input、select和textarea处理方式一样& radio & checkbox & 非受控组件-类似于Vue中ref-实际上就是直接操作DOM

  • 不同的表单项数据处理(受控组件)

    • input、select和textarea处理方式一样
  • radio

  <label htmlFor="male"></label>
  <input checked={this.state.gender==='male'?true: false} value='male' onChange={this.handleGender} name='gender' type="radio" id="male"/>
  <label htmlFor="male"></label>
  <input checked={this.state.gender==='female'?true: false} value='female' onChange={this.handleGender} name='gender' type="radio" id="female"/>
  • checkbox
favourHandle = (e) => {
  // 处理checkbox:原来已经存在的值,就删除;原来不存在的值,就添加
let favour = [...this.state.favour];
  let index = favour.findIndex(item=>{
    return item == e.target.value
  })
  if(index == -1) {
    // 原来没有值,就添加
    favour.push(e.target.value);
  }else{
    // 原来有值,就删除
    favour.splice(index, 1);
  }
  // 更新默认值
  this.setState({
    favour: favour
  });
}
<label htmlFor="smoking">吸烟</label>
<input checked={this.state.favour.some(item=>item==='smoking')}  onChange={this.handleFavour} value='smoking' type="checkbox" id="smoking"/>
<label htmlFor="drinking">喝酒</label>
<input checked={this.state.favour.some(item=>item==='drinking')} onChange={this.handleFavour} value='drinking' type="checkbox" id="drinking"/>
<label htmlFor="tangtou">烫头</label>
<input checked={this.state.favour.some(item=>item==='tangtou')}  onChange={this.handleFavour} value='tangtou' type="checkbox" id="tangtou"/>
  • 简化表单绑定操作

    handleItem = (e) => {
      this.setState({
        // ES6新特性:对象属性可以是动态值
        [e.target.id]: e.target.value
      })
    }
    
  • 非受控组件(类似于Vue中ref,实际上就是直接操作DOM)

    • 通过ref实例对象current属性可以得到原生DOM对象
    • 可以使用defaultValue指定表单的默认值
    // 构造函数
    this.textInput = React.createRef();
    // 标签中
    <input type="text" ref={this.textInput} />
    // 使用(current表示DOM元素)
    this.textInput.current
    
  • 文件上传应用

    this.fileRef = React.createRef();
    let fileInfo = this.fileRef.current.files[0];
    <input type="file" id="file" ref={this.fileRef}/>
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值