interview
react-basics
React 中如何为非受控组件设置默认值

React 基础面试题, React 中如何为非受控组件设置默认值?

React 基础面试题, React 中如何为非受控组件设置默认值?

QA

Step 1

Q:: React 中如何为非受控组件设置默认值?

A:: 在 React 中,非受控组件的默认值可以通过使用 HTML 元素的默认属性来设置。例如,<input> 元素的默认值可以通过 defaultValue 属性来设置,<textarea> 和 <select> 元素也有类似的 defaultValue 属性。这些属性在组件首次渲染时会被应用,但之后组件的状态不会被 React 管理。因此,非受控组件的值会随着用户的输入改变而改变,而不是通过 React 的状态管理。

Step 2

Q:: 什么是受控组件和非受控组件?它们有什么区别?

A:: 受控组件是指在 React 中,其值由 React 的状态(state)管理,任何对输入的更改都会触发事件处理程序来更新状态,从而导致组件重新渲染。受控组件需要通过 onChange 事件处理输入的变化。非受控组件则依赖于 DOM 本身来存储状态,使用 ref 来访问 DOM 元素以读取其当前值。受控组件更适合复杂的表单处理,而非受控组件则在需要直接访问底层 DOM 的场景中更为有用。

Step 3

Q:: React 中如何使用 ref 来操作非受控组件?

A:: 在 React 中,可以使用 ref 来访问非受控组件的 DOM 元素,从而读取或操作其当前值。首先,通过 React.createRef() 创建一个 ref 对象,然后将这个对象通过 ref 属性赋给组件。之后可以通过 this.ref.current 来访问该组件的 DOM 元素。例如,对于一个 <input> 元素,可以通过 this.ref.current.value 来获取当前输入的值。

用途

面试非受控组件相关的问题主要是为了考察候选人对 React 中的表单处理、状态管理和 DOM 操作的理解。在实际生产环境中,非受控组件常常用于需要直接操作 DOM 的场景,例如与第三方库集成时,需要与原生的 HTML 表单元素进行交互,而不希望通过 React 状态进行管理。了解这些知识有助于开发者在需要更高性能或特定场景时做出合理的技术选择。\n

相关问题

🦆
什么时候应该使用受控组件?什么时候使用非受控组件?

受控组件适用于表单元素需要完全由 React 状态管理的情况,特别是在需要实时验证或动态改变输入内容的情况下。而非受控组件适用于简单的表单或需要与非 React 代码库交互的场景,例如集成第三方库或操作大型数据集时。

🦆
如何将受控组件转换为非受控组件?

要将受控组件转换为非受控组件,只需从组件的属性中去掉 value 和 onChange 处理程序,并改用 defaultValue 和 ref 进行初始值和输入值的管理。这样,组件的状态就不再由 React 管理,而是交由 DOM 自己处理。

🦆
React 中的 ref 是什么?它有什么作用?

ref 是 React 提供的一种访问 DOM 元素或 class 组件实例的方法。通过 ref,可以直接操作 DOM 元素或调用 class 组件实例的方法。ref 最常用于非受控组件中,或者在需要强制焦点、选择文本、触发动画或集成第三方 DOM 库时。

🦆
在 React 中如何正确处理表单验证?

在 React 中,表单验证通常在受控组件的基础上进行。通过在输入元素的 onChange 事件中调用验证函数,可以动态检测输入的有效性,并在组件的状态中存储验证结果。也可以通过使用第三方库(如 Formik 或 React Hook Form)来简化复杂表单的验证和管理。