1-Class组件
Create by fall on:2021-11-14
Recently revised in:2022-01-19
现在已经不推荐使用 class 组件了
input 表单
import React from "react";
class ListForm extends React.Component {
  constructor(props){
    super(props)
    this.state ={ value:''}
    this.handleChange = this.handleChange.bind(this)
    this.handleSumbit = this.handleSumbit.bind(this)
  }
  handleChange(e){
    this.setState({value:e.target.value})
  }
  handleSumbit(e){
    console.log(this.state.value)
  }
  render() {
    return (<div>
      <form onSubmit={this.handleSumbit}>
        <label>
          名字
          <input type="text" value={this.state.value} onChange={this.handleChange} name="name"></input>
        </label>
        <input type="submit" value="提交"></input>
      </form>
    </div>)
  }
}
export default ListForm
textarea表单
class ListTextArea extends React.Component {
  constructor(props) {
    super(props)
    this.state = {
      value: '这里有一段文本等待编辑'
    }
    this.onTextChange = this.onTextChange.bind(this)
    this.onSubmit = this.onSubmit.bind(this)
  }
  onTextChange(e) {
    this.setState({ value: e.target.value })
  }
  onSubmit(e) {
    console.log(this.state.value)
    e.preventDefault()
  }
  render() {
    return (<form onSubmit={this.onSubmit}>
      <label>
        文章:
        <textarea value={this.state.value} onChange={this.onTextChange}></textarea>
      </label>
      <input type='submit' value="调教"></input>
    </form>)
  }
}
this.state.value 初始化于构造函数中,因此文本区域默认有初值。
select 表单
class OptionList extends React.Component {
  constructor(props){
    super(props)
    this.state ={
      select:'penapple',
      hero:['cat']
    }
    this.handleChange()
    this.handleSubmit.bind(this)
    this.handleChange.bind(this)
  }
  handleChange(e){
    this.setState({select:e.target.value})
  }
  handleHero(ev){
    this.setState({hero:ev.target.value})
  }
  handleSubmit(e){
    console.log(this.state)
    e.preventDefault() 
  }
  render() {
    return (<form onSubmit={this.handleSubmit}>
      <label>
        选择水果
        <select value={this.state.select} onChange={this.handleChange}>
          <option value='banana'>香蕉</option>
          <option value='orange'>橘子</option>
          <option value="penapple">菠萝</option>
        </select>
      </label>
      <label>
        选择几位队友禁言吧
        {/* multiple可以提供进行多选 */}
        <select value={this.state.hero} onChange={this.handleHero} multiple={true}>
          <option value='longgui'>披甲龙龟</option>
          <option value='cat'>猫咪</option>
          <option value="hasagei">亚索</option>
          <option value="gailun">盖伦</option>
          <option value="grasshopeer">蚂蚱</option>
          <option value="oldcircle">轮子妈</option>
          <option value="sunofbeach">日女</option>
        </select>
      </label>
      <input type="submit" value="瓜皮"></input>
    </form>)
  }
}
多输入框表单
class ManyList extends React.Component {
  constructor(props) {
    super(props)
    this.state = { 
      name: '',
      address:'',
      relationship:'',
      condition:''
   }
    this.handleChange = this.handleChange.bind(this)
    this.handleSumbit = this.handleSumbit.bind(this)
  }
  handleChange(e) {
    const target = e.target
    const value = target.type === 'checkbox'?target.checked:target.value
    this.setState({ [target.name]:value })
  }
  handleSumbit(e) {
    console.log(this.state.value)
    e.preventDefault();
  }
  render() {
    return (<div>
      <form onSubmit={this.handleSumbit}>
        <label>
          叫什么啊
          <input name="name" type="text" value={this.state.name} onChange={this.handleChange} ></input>
        </label>
        <label>
          家住哪啊
          <input name="address" type="text" value={this.state.address} onChange={this.handleChange} ></input>
        </label>
        <label>
          有女朋友没
          <input name='relationship' type="text" value={this.state.relationship} onChange={this.handleChange} ></input>
        </label>
        <label>
          有房有车没
          <input type="condition" value={this.state.condition} onChange={this.handleChange} ></input>
        </label>
        <input type="submit" value="提交"></input>
      </form>
    </div>)
  }
}
setState() 自动将部分 state 合并到当前 state, 只需调用它更改部分 state 即可。
非受控组件
在一个受控组件中,表单数据是由 React 组件来管理的。表单数据此时将会交给 DOM 进行处理。