我对此感到困惑。
我有一个受控输入(我正在使用Material-UI TextField和Autocomplete)。
我很高兴组件能够控制其自身的值,但我希望能够清除输入。
我该怎么做?
function App() {
const handleClick = useCallback(() => {
//Do what?
}, []);
return (
<div className="App">
<TextField label="I'm a controlled input" />
<button onClick={handleClick}> Click to clear</button>
</div>
);
}
我不想自己实现此状态的原因是因为autocomplete +文本字段非常复杂,我认为必须有一个更简单的解决方案。
是否有一种方法可以模仿键盘事件来清除文本字段?
答案 0 :(得分:0)
由于您没有明确设置TextField
的值,因此它实际上不是受控输入。
您可以将TextField
的值设置为一个状态,然后在单击按钮时清除该状态:
function App() {
const [text, setText] = useState("");
const handleClick = useCallback(() => {
setText("");
}, []);
return (
<div className="App">
<TextField label="I'm a controlled input" value={text} onChange={(e) => setText(e.target.value)} />
<button onClick={handleClick}> Click to clear</button>
</div>
);
}
如果您不想使用状态,则可以使用inputRef
的道具TextField
获取对输入的引用,然后手动将其清除:
function App() {
const ref = useRef();
const handleClick = useCallback(() => {
ref.current.value = "";
}, []);
return (
<div className="App">
<TextField label="I'm an uncontrolled input" inputRef={ref} />
<button onClick={handleClick}> Click to clear</button>
</div>
);
}