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> ); }