[英]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.