美文网首页React
008|React之处理表单

008|React之处理表单

作者: 中年小钢炮 | 来源:发表于2017-06-06 22:30 被阅读39次

在HTML中,一个经典表单如下:

<form>
  <label>
    Name:
    <input type="text" name="name" />
  </label>
  <input type="submit" value="Submit" />
</form>

在React中,表单存在于一个组件中。为了更好的控制,通知组件会将控件的赋值操作给截获,获取新值,然后再设置于控制。这样可以保证表单与组件中的数值一致。

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

    this.handleChange = this.handleChange.bind(this);
    this.handleSubmit = this.handleSubmit.bind(this);
  }

  handleChange(event) {
    this.setState({value: event.target.value}); // 截获value
  }

  handleSubmit(event) {
    alert('A name was submitted: ' + this.state.value);
    event.preventDefault();
  }

  render() {
    return (
      <form onSubmit={this.handleSubmit}>
        <label>
          Name:
          <input type="text" value={this.state.value} onChange={this.handleChange} /> // 将state.value设置到控件
        </label>
        <input type="submit" value="Submit" />
      </form>
    );
  }
}

上面是input的处理,我们再来看一下select的处理。select也是处理value,以及截获onChange。

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

    this.handleChange = this.handleChange.bind(this);
    this.handleSubmit = this.handleSubmit.bind(this);
  }

  handleChange(event) {
    this.setState({value: event.target.value});
  }

  handleSubmit(event) {
    alert('Your favorite flavor is: ' + this.state.value);
    event.preventDefault();
  }

  render() {
    return (
      <form onSubmit={this.handleSubmit}>
        <label>
          Pick your favorite La Croix flavor:
          <select value={this.state.value} onChange={this.handleChange}> // 截获onChnage
            <option value="grapefruit">Grapefruit</option>
            <option value="lime">Lime</option>
            <option value="coconut">Coconut</option>
            <option value="mango">Mango</option>
          </select>
        </label>
        <input type="submit" value="Submit" />
      </form>
    );
  }
}

上述两种情况,处理的均是单一控件的情况。如果有多个控件,可以通过添加name属性来区别:

class Reservation extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      isGoing: true,
      numberOfGuests: 2
    };

    this.handleInputChange = this.handleInputChange.bind(this);
  }

  handleInputChange(event) {
    const target = event.target;
    const value = target.type === 'checkbox' ? target.checked : target.value;
    const name = target.name; // 获取名字

    this.setState({
      [name]: value // 此处是关键,将value的key设置为target.name
    });
  }

  render() {
    return (
      <form>
        <label>
          Is going:
          <input
            name="isGoing"
            type="checkbox"
            checked={this.state.isGoing} // 直接使用name作为key
            onChange={this.handleInputChange} />
        </label>
        <br />
        <label>
          Number of guests:
          <input
            name="numberOfGuests"
            type="number"
            value={this.state.numberOfGuests} // 直接使用name作为key
            onChange={this.handleInputChange} />
        </label>
      </form>
    );
  }
}

React中什么是Uncontrolled Component?

好,这一节就到这里。后续我将介绍更多React技术细节,来慢慢解答上述问题。

想学计算机技术吗?需要1对1专业级导师指导吗?想要团队陪你一起进步吗?欢迎加我为好友!微信号:iTekka。

相关文章

  • 008|React之处理表单

    在HTML中,一个经典表单如下: 在React中,表单存在于一个组件中。为了更好的控制,通知组件会将控件的赋值操作...

  • 5-React 组件之表单与受控非受控组件

    React.js [TOC] 表单 在 React 里, HTML 表单元素的工作方式和其他的 DOM ...

  • React学习笔记_03

    React 表单处理 表单受控组件 html中的表单元素是可输入的,也就是有自己的可变状态 React中可变状态通...

  • React

    React 表单与事件 React 简单介绍 React 入门实例教程 Github-react-demos 从一...

  • 深入React技术栈:表单

    表单 在React中一些数据都是状态的表现,其中当然也包括表单数据,今天我们了解一下React中是如何处理表单数据...

  • react-redux + redux + react 简单入门

    项目地址: https://github.com/ddvdd008/react-redux/tree/master...

  • 受控组件

    1、定义 渲染表单的 React 组件还控制着用户输入过程中表单发生的操作。被 React 以这种方式控制取值的表...

  • React 列表与表单

    列表 在React中,拿到一组数据后,一般会用map方法来遍历渲染。 表单 HTML 表单元素与 React 中的...

  • react表单

    在web应用开发中,表单的作用尤为重要,正是因为表单的存在,才使得用户能够与web应用进行富交互。 文本框 你会发...

  • React 初探之 受控组件 VS 非受控组件

    概述 React 中的受控组件和非受控组件都是针对于表单数据而言的。React 推荐使用受控组件来处理表单数据。 ...

网友评论

    本文标题:008|React之处理表单

    本文链接:https://www.haomeiwen.com/subject/ydpnfxtx.html