React 非常有效地处理重新渲染。它只重新渲染更改。
有两种配置输入的方法
第一:受控输入
对于受控输入,您通常使用状态变量(或在某些情况下甚至是props)指定输入的值。在这种情况下,您需要调用 onChange 函数来设置状态(或props),因为值设置为状态/props,您需要更改它以更改值,否则它将保持不变。
前任
<input value={this.state.textVal} onChange={(e) => this.setState({textVal: e.target.value}) />
拥有受控输入的优点是您可以在整个 React 组件中使用值,并且您不需要在输入时触发事件或访问 DOM 来获取值。
第二:不受控制的输入
在这种情况下,您不需要 onChange 处理程序来获取输入,因为您没有为输入指定自定义值。可以通过访问 dom 或从事件对象获取输入的值
前任:
<input type="text" onBlur={(e) => {console.log(e.target.value)}/>
获取输入值的另一种方法是访问我们使用 refs 作为的 DOM this.inputVal.value
请参阅有关如何使用 ref 的答案:
在 React .js 中:是否有任何类似于 javascript 中的 document.getElementById() 的函数?如何选择某个对象?
关于你关于 React virtualDOM 的问题
虚拟 DOM 用于高效地重新渲染 DOM。这与脏检查您的数据并没有真正的关系。您可以使用带有或不带有脏检查的虚拟 DOM 重新渲染。计算两个虚拟树之间的差异有一些开销,但虚拟 DOM 差异是关于了解 DOM 中需要更新的内容,而不是您的数据是否已更改。
只有在状态改变时才会重新渲染虚拟树。因此,使用 observable 来检查状态是否已更改是防止不必要的重新渲染的有效方法,这会导致许多不必要的树差异。