React 受控组件和非受控组件

受控组件和非受控组件一般是针对于表单组件来说的

受控组件:

  组件的 value 是使用 this.state 来维护的,如果要修改值的话需要事件绑定然后使用 setState 的方式去修改。这种修改方式是属于 由React来控制表单数据值的,所以称为受控组件

非受控组件:

  组件的 value 是使用 React提供的 ref 来直接操作DOM元素获得的

  因为非受控组件是将真实数据储存在 DOM 节点中,然后来获取这个DOM节点,操作这个DOM节点。如果你不介意代码美观性,并且希望快速编写代码,使用非受控组件往往可以减少你的代码量。否则,你应该使用受控组件。React也不提倡直接去操作DOM的方式去编写代码,这个框架有自己一套虚拟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);
    event.preventDefault();
  }

  render() {
    return (
      <form onSubmit={this.handleSubmit}>
        <label>
          Name:
          <input type="text" ref={this.input} />
        </label>
        <input type="submit" value="Submit" />
      </form>
    );
  }
}

非受控组件的默认值:

  在非受控组件中,React 可以赋予组件一个初始值,但是不去控制后续的更新。 在这种情况下, 你可以指定一个 defaultValue 属性,而不是 value

render() {
  return (
    <form onSubmit={this.handleSubmit}>
      <label>
        Name:
        <input
          defaultValue="Bob"
          type="text"
          ref={this.input} />
      </label>
      <input type="submit" value="Submit" />
    </form>
  );
}

 

posted on 2020-09-04 15:36  棋士牧生  阅读(127)  评论(0编辑  收藏  举报

导航