【发布时间】:2019-05-20 11:18:57
【问题描述】:
如果表单无效,我想阻止 react-router 转换离开表单。 Using a prompt 这样做并不令人满意,因为我想完全阻止用户导航到新路线,直到表单有效(而提示似乎总是为用户提供继续的选项),并且会喜欢在我的页面上显示错误消息而不是侵入性提示。
如何在没有提示的情况下阻止这种转换?
我的表格:
<form>
<div>
<label>Name: </label>
<input
type="text"
name="name"
id="name"
onChange={this.handleChange}
autoComplete="name"
/>
</div>
<div>
<label>Email: </label>
<input
type="text"
name="email"
id="email"
onChange={this.handleChange}
autoComplete="email"
/>
</div>
<div>
<label>Password: </label>
<input
type="password"
name="password"
id="password"
onChange={this.handleChange}
autoComplete="new-password"
/>
</div>
<br />
<div>
<!-- HERE IS THE LINK I WANT TO DISABLE IN CASE OF INVALID FORM -->
<Link when={this.state.formIsValid} to="/F2">
<button
onClick={() => {
if (this.formIsValid()) {
this.props.updatePurchaseRecord({
name: this.state.name,
email: this.state.email,
password: this.state.password,
purchase_id: this.props.purchase_id
});
}
}}
>
Next
</button>
</Link>
</div>
</form>
单击“下一步”按钮后运行的我的 formIsValid 函数:
formIsValid() {
let isValid = true;
let formErrors = { name: "", email: "", password: "" };
// validate name
if (this.state.name === "") {
isValid = false;
formErrors.name = "Name is required";
}
// validate email
if (this.state.email === "") {
isValid = false;
formErrors.email = "Email is required";
}
// validate password
if (this.state.password === "") {
isValid = false;
formErrors.password = "Password is required";
}
this.setState({ formErrors });
return isValid;
}
【问题讨论】:
标签: reactjs react-router