在React中,表单元素(如<input>
、<textarea>
、<select>
)可以是受控组件或非受控组件。理解这两种组件的概念及其切换时的注意事项对于避免潜在的问题至关重要。
受控组件:其值由React组件的状态控制。每次用户输入时,都会触发事件处理函数来更新状态。
非受控组件:其值由DOM自身管理。可以通过ref
直接访问DOM元素的当前值。
这种切换可能导致以下问题:
value
属性和defaultValue
属性,或者同时使用了value
和ref
,React可能会混淆。defaultValue
或defaultChecked
属性来设置初始值。value
/onChange
和defaultValue
/defaultChecked
。import React, { useState } from 'react';
function ControlledInput() {
const [value, setValue] = useState('');
return (
<input
type="text"
value={value}
onChange={(e) => setValue(e.target.value)}
/>
);
}
import React, { useRef } from 'react';
function UncontrolledInput() {
const inputRef = useRef(null);
function handleSubmit(event) {
event.preventDefault();
console.log(inputRef.current.value);
}
return (
<form onSubmit={handleSubmit}>
<input
type="text"
defaultValue="Initial Value"
ref={inputRef}
/>
<button type="submit">Submit</button>
</form>
);
}
通过理解这两种模式的差异和适用场景,并遵循上述建议,可以有效避免在React开发中遇到的相关问题。
领取专属 10元无门槛券
手把手带您无忧上云