受控组件

受控组件

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

 

 

 

 

 

posted @ 2017-12-22 13:18  HelloHello233  阅读(207)  评论(0编辑  收藏  举报