[英]Why does react form's onSubmit fire after every keystroke, how to use enter button to submit form?
目标是通过按回车按钮提交表单。 所以我在我的反应表单中添加了onSubmit
属性。 表单在每次按键后提交。 没问题,我可能只是忘记绑定提交方法对吗? 错了,它是一个无状态的功能组件。
提交功能:
const postLogin = (e) => {
e.preventDefault()
axios.post("http://<...>/users/login", {
username,
password
}).then(result => {
if (result.status === 200) {
console.log(result.data)
setAuthTokens(result.data.token);
setRole(result.data.role);
} else {
setIsError(true);
}
}).catch(e => {
setIsError(true);
});
}
形式:
<Form onSubmit={postLogin}>
<Input
type="username"
value={username}
placeholder="username"
onChange={e => setUserName(e.target.value)}
/>
<Input
type="password"
value={password}
placeholder="password"
onChange={e => setPassword(e.target.value)}
/>
<Button onClick={() => postLogin}>Sign In</Button>
<Button onClick={postRegister({username, password})}>Register</Button>
</Form>
所有组件都是样式组件并匹配它们的元素(表单、按钮、输入)我还尝试在密码输入上设置onKeyPress
侦听器并给出一个条件,如e => e.keyCode === 13 ? postLogin() : null
e => e.keyCode === 13 ? postLogin() : null
,这也不起作用。
我如何防止此提交功能触发每次击键,并使用回车按钮提交表单?
当调用setPassword
或setUserName
然后你的组件重新渲染时,这会导致第二个按钮导致注册问题
删除第二个按钮“注册”中的 onClick 处理程序,因为您每次渲染组件时都会调用它。
所以
()
)<Form>
<Input
type="username"
value={username}
placeholder="username"
onChange={e => setUserName(e.target.value)}
/>
<Input
type="password"
value={password}
placeholder="password"
onChange={e => setPassword(e.target.value)}
/>
<Button onClick={() => postLogin()}>Sign In</Button>
<Button onClick={() => postRegister({username, password})}>Register</Button>
</Form>
只需添加按钮类型
<Button type="submit">Sign In</Button>
或者从表单标签中删除 onSubmit 并更改
<Button onClick={() => postLogin()}>Sign In</Button>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.