React 里输入框不是“随便写就行”。一旦有表单,你就会遇到受控组件和非受控组件。
#1. 受控组件 —— 面板完全由主控板管理
function TempForm() {
const [temp, setTemp] = useState('26');
return (
<input
value={temp}
onChange={(e) => setTemp(e.target.value)}
/>
);
}#2. 非受控组件 —— 面板自己记,主控板偶尔去读
function TempForm() {
const inputRef = useRef<HTMLInputElement>(null);
const handleSubmit = () => {
alert(inputRef.current?.value);
};
return (
<>
<input ref={inputRef} defaultValue="26" />
<button onClick={handleSubmit}>提交</button>
</>
);
}受控 vs 非受控:
| 受控 | 非受控 | |
|---|---|---|
| 数据放哪 | React state | DOM 自己 |
| 适合 | 联动复杂、实时校验 | 简单输入、一次性读取 |
| 类比 | 中央控制面板 | 现场独立旋钮 |