前端/移动开发面试题更新 2026-08-05

在 React 中,针对非受控组件(即由 DOM 自身维护状态的组件),有哪些方法可以为其设置初始默认值?请详细说明其实现方式与注意事项。

前端/移动开发技术原理React

考察说明

考查对 React 受控与非受控组件概念的理解,以及非受控组件默认值设置的实现细节。

回答思路

  1. 【回答框架 1】非受控组件的默认值通过 defaultValue 属性设置,该属性仅在组件挂载时生效,后续渲染不会更新 DOM 的值。与之相对,受控组件使用 value 属性并配合 onChange 事件,而 defaultValue 只用于非受控组件,二者不可混用。
  2. 【回答框架 2】对于不同表单元素,defaultValue 的使用方式略有差异:input 和 textarea 直接使用 defaultValue 属性,select 则使用 defaultValue 指定默认选中的 option 值(可以是数组实现多选),checkbox 和 radio 使用 defaultChecked 属性设置默认选中状态。
  3. 【回答框架 3】当需要为多个非受控字段设置默认值时,可以给每个元素分别添加 defaultValue,或者使用 ref 在组件挂载后(如 useEffect 中)手动设置 DOM 的 value 属性,但这种方式需要额外处理初始渲染,不如 defaultValue 简洁。
  4. 【回答框架 4】需要注意 defaultValue 不会响应后续的 props 变化,如果父组件期望动态更新值,应考虑使用受控组件或通过 key 属性强制重新挂载子组件来重置默认值。
  5. 【关键点 1】非受控组件通过 defaultValue 设置初始值,仅在挂载时生效。
  6. 【关键点 2】checkbox 和 radio 使用 defaultChecked 而非 defaultValue。
  7. 【关键点 3】select 可设置 defaultValue 为单个值或数组,对应单选或多选。
  8. 【关键点 4】如需动态更新默认值,可结合 key 属性重新挂载组件。
  9. 【易错点 1】误以为 defaultValue 会随 props 变化而更新,实际它只作为初始值。
  10. 【易错点 2】在受控组件中使用 defaultValue 会导致实际值重置问题,应避免混用。
  11. 【易错点 3】通过 ref 手动设置值时可触发不了 React 的事件系统,可能导致后续交互异常。