5.表单组件

2018-02-11  本文已影响4人  Srtian

在React组件中,表单组件与其他的组件时不一样的。

表单组件支持几个受用户交互影响的属性:

表单组件可以通过onChange回调函数来监听组件变化。当用户做出以下交互时,onChange 执行并通过浏览器做出响应:

受控组件与非受控组件

接下来我们来聊一聊受控组件与非受控组件。受控组件的值由props或state传入,用户在元素上交互或输入内容会引起应用state的改变。在state改变之后重新渲染组件,我们才能在页面中看到元素中值的变化,假如组件没有绑定事件处理函数改变state,用户的输入是不会起到任何效果的,这也就是“受控”的含义所在。

而非受控组件则类似于传统的DOM表单控件,用户输入不会直接引起应用state的变化,我们也不会直接为非受控组件传入值。想要获取非受控组件,我们需要使用一个特殊的ref属性,同样也可以使用defaultValue属性来为其指定一次性的默认值。

而在表单组件中,我们一般都需要来响应用户的输入,会有表单组件的出发和数据的处理。因此,我们在表单组件中一般都是使用受控组件,这样可以保证表单的数据在组件的state管理之下,而不是各自独立保有各自的数据。

受控组件

接下来,我们先来延时以下如何定义一个受控组件:

render: function() {
    return <input type="text" value="Hello,world!" />;
  }

一个受控的input有一个value的prop。在这个input中,用户的输入并不会对其产生影响,因为React已经有了声明value值了。当我们需要对其进行改变的时候我们就需要onChange事件了。

 getInitialState: function() {
    return {value: 'Hello!'};
  },
  handleChange: function(event) {
    this.setState({value: event.target.value});
  },
  render: function() {
    return (
      <input
        type="text"
        value={this.state.value}
        onChange={this.handleChange}
      />
    );
  }
非受控组件

相反的不使用value值就是非受控组件:

render: function() {
    return <input type="text"/>;
  }

上面的代码将渲染出一个空值的输入框,用户输入将立即反应到元素上。和受控元素一样,使用 onChange 事件可以监听值的变化。

不受控组件维持它自己的内部状态。而受控组件不维持它自己的内部状态,它基于prop来渲染。

上一篇 下一篇

猜你喜欢

热点阅读