如何在不使用状态的情况下清除功能组件中输入字段的值?
How to clear the value of an input field in a functional component without using state?
我有一个输入字段,我通过 onKeyUp 处理输入(因为我需要访问 event.which
)。到目前为止,这很好用,因为我只是通过 event.target.value
获取输入的内容,但是当我尝试重置输入字段的值时,我 运行 遇到了问题。
我使用的是功能组件,因此无法通过 refs 访问输入,我在 useRef 中找到的所有示例都只展示了如何聚焦输入字段,而不是如何清除它。
我忘了说我正在使用 Material-UI.
您可以通过将 ref.current.value
命令式设置为空字符串来清除功能组件中带有 ref 的输入值:
const App = () => {
const textInput = React.useRef();
const clearInput = () => (textInput.current.value = "");
return (
<>
<input type="text" ref={textInput} />
<button onClick={clearInput}>Reset</button>
</>
);
}
我当前的解决方案使用 onChange 更新值的状态,使用 onKeyUp 处理输入(并最终重置值):
export default function TypingArea() {
const [inputValue, setInputValue] = useState('');
const handleChange = event => {
setInputValue(event.target.value);
};
const handleInput = event => {
// access event.which for the keycode and eventually clear the inputfield value
setInputValue('');
}
return (
<TextField
onChange={handleChange}
onKeyUp={handleInput}
type='text'
value={inputValue} />);
}
我可能 运行 遇到此设置的问题,因为我不确定谁先 运行,onChange 或 onKeyUp,但它现在有效。
考虑到您使用的是功能组件,您可以 e.target.reset。
const [state, setState] = React.useState({ username: "", password: "" });
const handleSubmit = e => {
e.preventDefault();
console.log(state);
e.target.reset();
};
const handleChange = e => {
setState({
...state,
[e.target.name]: e.target.value
});
};
return (
<div className="App">
<h1>Log In</h1>
<form onSubmit={handleSubmit}>
<input
className="userInput"
name="username"
type="text"
placeholder="username"
onChange={handleChange}
/>
<br />
<input
className="userInput"
name="password"
type="password"
placeholder="password"
onChange={handleChange}
/>
<br />
<input className="userSubmit" type="submit" value="Log In" />
</form>
</div>
);
}
const [tasks, setTasks] = useState([]);
const [input, setInput] = useState(' ');
Const addTask = () => {
setTasks([...tasks, input])
SetInput(' ')
}
return (
<button onClick={addTasks}/>Add Task <button/>
)
我有一个输入字段,我通过 onKeyUp 处理输入(因为我需要访问 event.which
)。到目前为止,这很好用,因为我只是通过 event.target.value
获取输入的内容,但是当我尝试重置输入字段的值时,我 运行 遇到了问题。
我使用的是功能组件,因此无法通过 refs 访问输入,我在 useRef 中找到的所有示例都只展示了如何聚焦输入字段,而不是如何清除它。
我忘了说我正在使用 Material-UI.
您可以通过将 ref.current.value
命令式设置为空字符串来清除功能组件中带有 ref 的输入值:
const App = () => {
const textInput = React.useRef();
const clearInput = () => (textInput.current.value = "");
return (
<>
<input type="text" ref={textInput} />
<button onClick={clearInput}>Reset</button>
</>
);
}
我当前的解决方案使用 onChange 更新值的状态,使用 onKeyUp 处理输入(并最终重置值):
export default function TypingArea() {
const [inputValue, setInputValue] = useState('');
const handleChange = event => {
setInputValue(event.target.value);
};
const handleInput = event => {
// access event.which for the keycode and eventually clear the inputfield value
setInputValue('');
}
return (
<TextField
onChange={handleChange}
onKeyUp={handleInput}
type='text'
value={inputValue} />);
}
我可能 运行 遇到此设置的问题,因为我不确定谁先 运行,onChange 或 onKeyUp,但它现在有效。
考虑到您使用的是功能组件,您可以 e.target.reset。
const [state, setState] = React.useState({ username: "", password: "" });
const handleSubmit = e => {
e.preventDefault();
console.log(state);
e.target.reset();
};
const handleChange = e => {
setState({
...state,
[e.target.name]: e.target.value
});
};
return (
<div className="App">
<h1>Log In</h1>
<form onSubmit={handleSubmit}>
<input
className="userInput"
name="username"
type="text"
placeholder="username"
onChange={handleChange}
/>
<br />
<input
className="userInput"
name="password"
type="password"
placeholder="password"
onChange={handleChange}
/>
<br />
<input className="userSubmit" type="submit" value="Log In" />
</form>
</div>
);
}
const [tasks, setTasks] = useState([]);
const [input, setInput] = useState(' ');
Const addTask = () => {
setTasks([...tasks, input])
SetInput(' ')
}
return (
<button onClick={addTasks}/>Add Task <button/>
)