受控组件与非受控组件
什么是受控组件?
受控组件是指表单元素的值由 React 的 state 控制。用户输入会触发状态更新,从而重新渲染组件,保持数据一致性。
import { useState } from 'react';
function ControlledInput() {
const [value, setValue] = useState('');
return (
<input
type="text"
value={value}
onChange={(e) => setValue(e.target.value)}
/>
);
}
`
在这个例子中,input 的值由 value 状态控制,任何用户输入都通过 onChange 修改状态。
什么是非受控组件?
非受控组件使用 ref 直接访问 DOM 元素的值,React 不管理其状态,适用于简单、不需要频繁更新的场景。
import { useRef } from 'react';
function UncontrolledInput() {
const inputRef = useRef();
const handleClick = () => {
alert(inputRef.current.value);
};
return (
<>
<input type="text" ref={inputRef} />
<button onClick={handleClick}>获取输入值</button>
</>
);
}
在这个例子中,输入框的值不会存储在组件状态中,而是通过 ref 直接读取。
选择哪种方式?
| 对比项 | 受控组件 | 非受控组件 |
|---|---|---|
| 数据来源 | React state | DOM 本身 |
| 状态管理 | 明确、集中 | 分散、不可追踪 |
| 推荐使用场景 | 表单验证、复杂交互 | 简单表单、快速开发 |
| 可测试性 | 更易测试 | 测试复杂 |
总结
- 受控组件 提供了更强的控制力和一致性,推荐用于大多数表单。
- 非受控组件 更接近原生 HTML 表单行为,适合简单的场景。
相关内容
- React 的设计理念:声明式 UI、组件化 React 的设计理念侧重于声明式 UI 和组件化。这种方式使得开发者能够更高效地构建可维护、可复用的用户界面。
- React 与其他前端框架的对比(Vue、Angular) React、Vue 和 Angular 都是流行的前端框架,它们各自有不同的设计理念和使用场景。React 强调组件化和虚拟 DOM,Vue 提供了更灵活的模板...
- React 是什么? React 是一个由 Facebook 开发的用于构建用户界面的 JavaScript 库。它通过组件化和声明式编程简化了复杂界面的开发,适用于构建交互丰富的单...
- useRef、useMemo、useCallback useRef、useMemo 和 useCallback 是 React 中常用的性能优化 Hooks,帮助管理引用、避免不必要的重新渲染和计算。
- 自定义 Hook 的创建与使用 自定义 Hook 是 React 中的一种机制,用于提取和复用组件逻辑。它可以将多个组件中共享的逻辑提取到独立的函数中,从而实现代码复用。
- Hook 规则与注意事项 在使用 React Hook 时,需要遵循一些规则和注意事项。了解这些规则可以帮助你避免常见的错误和性能问题,确保应用程序的稳定性和可维护性。