当前位置: 首页 > 面试题库 >

受控组件与非受控组件ReactJs

空枫涟
2023-03-14
问题内容

几乎在每个ReactJS教程中,甚至在用于处理输入更改的官方文档中,都建议使用onChange。我们使用状态作为值,并通过onChange对其进行更改。这会在每个按键中触发渲染。所以,

  1. 渲染真的那么便宜吗?
  2. 输入值不保存在DOM中吗?因此DOM和VirtualDOM之间没有区别,因此尽管渲染发生了什么变化?(可能是错误的假设)。

出于娱乐和学习目的,我尝试了以下方法:

  1. 使用自定义函数和变量来保存该值,而不是在每次击键时都设置上次输入后的状态,并传递与该值相关的组件等。
  2. 使用onBlur而不是onChange。

但是,我不喜欢他们中的任何一个,并且想问这个问题。如果实时输入值更改对我们不重要,我们只关心最后一个输入,那么onChange还是可行的方法?


问题答案:

React非常有效地处理了重新渲染,只重新渲染了更改。

有两种配置输入的方法

第一:受控输入

使用受控输入时,通常使用状态变量(甚至在某些情况下甚至是prop)来指定输入的值。在这种情况下,您需要调用onChange函数来设置状态(或属性),因为该值被设置为状态/属性,并且您需要更改该值以更改该值,否则它将保持不变。

防爆

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

获取输入值的另一种方法是访问DOM,我们使用refs作为 this.inputVal.value

有关如何使用ref的信息,请参见以下答案:

在React.js中:有没有类似JavaScript中的document.getElementById()之类的函数?如何选择某个对象?

关于您对React virtualDOM的质疑

虚拟DOM用于有效地重新渲染DOM。这实际上与对数据进行脏检查无关。您可以使用带有或不带有脏检查的虚拟DOM重新渲染。计算两个虚拟树之间的差异时会有一些开销,但是虚拟DOM差异是关于了解DOM中需要更新的内容,而不是了解您的数据是否已更改。

仅在状态更改时才重新渲染虚拟树。因此,使用可观察对象来检查状态是否已更改是防止不必要的重新渲染的有效方法,因为重新渲染会导致大量不必要的树差异。



 类似资料:
  • 问题内容: ReactJS中什么是受控组件和非受控组件?它们之间有何不同? 问题答案: 这与有状态DOM组件(表单元素)有关,而React文档解释了区别: 甲控制的部件是一个,通过取其电流值和通过像回调通知变化。父组件通过处理回调并管理其自身的状态并将新值作为道具传递给受控组件来“控制”它。您也可以将其称为“哑组件”。 一个不受控制的组件是一个存储其自己的内部状态,并且您使用查询DOM ,当你需要

  • 本文向大家介绍受控组件和非受控组件有什么区别?相关面试题,主要包含被问及受控组件和非受控组件有什么区别?时的应答技巧和注意事项,需要的朋友参考一下 受控组件用value和组件的state绑定,当value更新时,会自动更新state 非受控组件没有value,采用ref直接操作dom

  • 在大多数情况下,我们推荐使用受控组件来实现表单。在受控组件中,表单数据由React组件处理。另外一个可选项是不受控组件,其表单数据由DOM元素本身处理。 不同于对每次状态处理都需要编写事件处理函数程序,在不受控组件中,你可以使用ref从DOM获得表单数据。 例如,在不受控组件中,以下代码可以输入名字: class NameForm extends React.Component { const

  • 在我看来,React-Hooks-useState非常适合模式选择使用props中的值或使用自己的状态,但是当我有条件地使用hook时,lint显示了一些错误。 工作示例 我尝试使用钩子,条件如下,但是使用eslint error

  • 本文向大家介绍react中什么是受控组件?相关面试题,主要包含被问及react中什么是受控组件?时的应答技巧和注意事项,需要的朋友参考一下 在React中,每当表单的状态发生变化时,都会被写入到组件的state中,这种组件在React被称为受控组件。 受控组件中,组件渲染的状态与它的value或者checked相对应。React通过这种方式消除了组件的局部状态。React官方推荐使用受控组件。

  • 我一直有这个错误:一个组件正在将受控输入的类型文本更改为不受控制。输入元件不应从受控切换到不受控(反之亦然)。决定在组件的生命周期内使用受控或不受控制的输入元件。当我尝试将值从数据库输入框点击编辑 这是我的代码: