React 进阶 -- 表单

  1. 受控组件

    利用 state 管理 input等标签 的输入内容。内容只能通过 setState 改变。

class NameForm extends React.Component {
  constructor(props) {
    super(props);
    this.state = {value: ''};

    this.handleChange = this.handleChange.bind(this);
    this.handleSubmit = this.handleSubmit.bind(this);
  }
  //没有onChange事件会触发警告,导致文本框中的内容无法更改和显示
  handleChange(event) {
    this.setState({value: event.target.value});
  }

  handleSubmit(event) {
    alert('提交的名字: ' + this.state.value);
    event.preventDefault();
  }

  render() {
    return (
      <form onSubmit={this.handleSubmit}>
        <label>
          名字:
          <input type="text" value={this.state.value} onChange={this.handleChange} />
        </label>
        <input type="submit" value="提交" />
      </form>
    );
  }
}
  1. 非受控组件

    建议采用受控组件,但是当你需要编写很多事件处理函数时可以使用非受控组件,即使用 ref 获取到真实的DOM节点。

    class NameForm extends React.Component {
      constructor(props) {
        super(props);
        this.handleSubmit = this.handleSubmit.bind(this);
        this.input = React.createRef(); 
      }
    
      handleSubmit(event) {
        alert('A name was submitted: ' + this.input.current.value); //通过current定位到当前DOM节点
        event.preventDefault();
      }
    
      render() {
        return (
          <form onSubmit={this.handleSubmit}>
            <label>
              Name:
              <input type="text" ref={this.input} />
            </label>
            <input type="submit" value="Submit" />
          </form>
        );
      }
    }