表单提交后错误提示不消失怎么办?
我在用 React 做一个登录表单,提交失败时会显示错误提示,比如“用户名或密码错误”。但用户修改输入后,错误提示还一直显示着,体验很不好。
我试过在 input 的 onChange 里清空错误状态,但有时候又会误清(比如还没改完就触发了)。有没有更稳妥的做法?
这是我的部分代码:
const [error, setError] = useState('');
const handleSubmit = async () => {
try {
await login(username, password);
} catch (err) {
setError('用户名或密码错误');
}
};
// 输入框
<input value={username} onChange={e => setUsername(e.target.value)} />
{error && <p className="error">{error}</p>}
更靠谱的做法是用useEffect监听输入值变化,当检测到username或password有变化时再清空错误。这样能保证用户确实修改了内容后再清除错误提示。
改后的代码大概这样:
这样处理更稳妥,不会出现用户刚敲第一个字母就清空错误的情况。当然如果你要更精确的控制,还可以加个防抖,但一般情况下这个方案就够用了。
另外吐槽一句,这种表单错误处理的坑我踩过无数次,React的effect真是救星...