【发布时间】:2021-01-24 09:36:26
【问题描述】:
我在使用 React-Final-Form 库时遇到了问题。从onSubmit 函数,我返回一个验证错误,但它没有显示在表单本身上。在这里你可以看到我的代码:
我的表格:
<Form
onSubmit={this.onSubmit}
initialValues={{}}
validate={
values => {
const errors = {}
if (!values.username) {
errors.username = "This field is required"
}
if (!values.password) {
errors.password = "This field is required"
}
return errors
}
}
render={({submitError, handleSubmit, submitting, values}) => (
<form onSubmit={handleSubmit}>
<div className="form-group">
<label>First Name</label>
<Field name="username">
{({input, meta}) => (
<>
<input {...input} type="text" placeholder="Username"
className={"form-control" + ((meta.error || meta.submitError) && meta.touched ? " is-invalid" : "")}/>
{(meta.error || meta.submitError) && meta.touched ?
<div
className="invalid-feedback">{meta.error || meta.submitError}</div> : null
}
</>
)}
</Field>
{submitError && (
<div>{submitError}</div>
)}
</div>
<div className="form-group">
<label>Password</label>
<Field name="password">
{({input, meta}) => (
<>
<input {...input} type="password"
placeholder="Password"
className={"form-control" + ((meta.error || meta.submitError) && meta.touched ? " is-invalid" : "")}/>
{(meta.error || meta.submitError) && meta.touched ?
<div
className="invalid-feedback">{meta.error || meta.submitError}</div> : null
}
</>
)}
</Field>
</div>
<button type="submit" disabled={submitting}
className="btn btn-block btn-outline-secondary">Log In
</button>
<pre>{JSON.stringify(values, 0, 2)}</pre>
</form>
)}
/>
我的 onSubmit 函数:
onSubmit = async values => {
const errors = {}
let loginData = {
username: values.username,
password: values.password
}
usersAPI.getCSRF().then((response) => {
usersAPI.login(loginData)
.then(response => {
if (response.data.login_status === "Incorrect data") {
console.log("Invalid data")
errors.username = "Invalid login or password"
errors.password = "Invalid login or password"
return errors
} else {
localStorage.setItem('token', response.data.token)
this.props.setAuthState(true)
console.log("Logged in successfully")
}
})
.catch(err => console.log(err))
})
}
问题出在 axios 请求中。如果我的后端服务器发送凭据无效的响应,则console.log("Invalid data") 将出现在控制台中,但表单不会发生任何事情。如果我评论我的 axios 请求并留下此代码:
onSubmit = async values => {
return {username: "Invalid data"}
}
因此,在这种情况下,一切正常。谁能告诉我如何优化我的 axios 请求,以便之后我的表单会收到从
返回的提交错误errors.username = "Invalid login or password"
errors.password = "Invalid login or password"
return errors
【问题讨论】:
-
仅供参考 - 因为您不是在等待电话,所以您不需要使用
async关键字。
标签: reactjs react-redux axios react-final-form react-forms