受控组件
受控组件
import React, { Component } from 'react';
class ControlledCompExample extends Component {
  constructor() {
    super();
    this.state = {
      fullName: ''
    }
  }
  handleFullNameChange = (e) => {
    this.setState({
      fullName: e.target.value
    })
  }
  handleSubmit = (e) => {
    e.preventDefault();
    console.log(this.state.fullName)
  }
  render() {
    return (
      <div>
        <form onSubmit={this.handleSubmit}>
          <label htmlFor="fullName">Full Name</label>
          <input
            type="text"
            value={this.state.fullName}
            onChange={this.handleFullNameChange}
            name="fullName" />
          <input type="submit" value="Submit" />
        </form>
      </div>
    );
  }
}
以上关键的地方在于:
state中设置表单的初始状态,当表单设置onChange,onChange中获取合成事件,通过evt.target.value把表单的值通过setState触发渲染,显示到界面上。
受控组件顾名思义,组件的状态受到控制,state与界面上显示的值时刻保持双向绑定。优点是方便校验(在onChange中),缺点是太臃肿。如果不需要监视表单的值,不需要实时校验,就使用非受控组件
如果不设置onChange,则界面上看不到我们输入的东西,即一直输入,但输入框总是空白的。因为value属性一直没发生变化(没有在onChange中对state进行更新)
非受控组件
通过ref获取表单的dom对象,再从中取值。下面通过ref将input的dom添加到this上:
<input type="text" ref={input => this.fullName = input} />
接着获取值:
this.fullName.value
                    
                
                
            
        
浙公网安备 33010602011771号