reactjs - 我希望页面仅在验证成功时才路由到另一个页面
问题描述
我希望页面仅在验证成功时路由到另一个页面,当没有添加按钮路由但当我添加路由时,表单显示正确的验证。所以在路由之前我必须在按钮点击上写什么条件。
代码如下:
import React,{ useState } from 'react'
import { useHistory } from 'react-router-dom'
function Form() {
const history = useHistory()
const [firstName,setFirstName] = useState("")
const [lastName,setLastName] = useState("")
const [email,setEmail] = useState("")
const [firstNameErr,setFirstNameErr] = useState({})
const [lastNameErr,setLastNameErr] = useState({})
const [emailErr,setEmailErr] = useState({})
const onSubmit = (e) => {
e.preventDefault();
const isValid = formValidation();
}
const formValidation = () => {
const firstNameErr = {};
const lastNameErr = {}
const emailErr = {}
let isValid = true;
if(firstName.trim().length < 5) {
firstNameErr.firstNameShort = "first name is short";
isValid = false;
}
if(!lastName.includes("123")) {
lastNameErr.lastName123 = "Last name must have 123";
isValid = false;
}
if(!email.includes("@")) {
emailErr.emailerror = "email must have @ character";
}
setFirstNameErr(firstNameErr);
setLastNameErr(lastNameErr);
setEmailErr(emailErr);
return isValid;
}
return (
<form onSubmit={onSubmit}>
<label> First Name: </label>
<input type="text"
value={firstName}
onChange={(e)=> {setFirstName(e.target.value)}}/>
<br/>
{Object.keys(firstNameErr).map((key)=>{
return <div style={{color: "red"}}>{firstNameErr[key]}</div>
})}
<label> Last Name: </label>
<input type="text"
value={lastName}
onChange={(e)=> {setLastName(e.target.value)}}/>
<br/>
{Object.keys(lastNameErr).map((key)=>{
return <div style={{color: "red"}}>{lastNameErr[key]}</div>
})}
<br/>
<label> email: </label>
<input type="email"
value={email}
onChange={(e)=> {setEmail(e.target.value)}}/>
<br/>
{Object.keys(emailErr).map((key)=>{
return <div style={{color: "red"}}>{emailErr[key]}</div>
})}
<button type="submit" onClick={() => history.push('/myvehicles')}>Submit</button>
</form>
)
}
export default Form
所以上面的代码如何在历史推送之前使用我必须添加的逻辑路由到我的车辆页面?
解决方案
无需添加点击事件处理程序..您已经有提交处理程序。只需在此处添加验证。
const onSubmit = (e) => {
e.preventDefault();
const isValid = formValidation();
if(isValid){ // if form is valid ,route
history.push('/myvehicles')
}
}
推荐阅读
- html - 注入 CSS 以便网站使用本地安装的 Google 字体
- reactjs - 在 mac 上安装 React
- reactjs - TypeScript:类型“ActionTypes”不满足约束“Action”
' - python - 需要帮助自动化以下火花逻辑以在 python 中获取列详细信息
- python - Python plotly - create_dendrogram 中的错误
- r - 如何从R中的特定日期计算新数据
- ios - 为什么我不能将颜色用作 ShapeStyle?
- uitableview - 如何通过协议和委托从 UITableViewCell 内的 UICollectionViewCell 传递数据以执行 segue 发送方?
- ruby - 尝试在 ubuntu18.04 上安装 rvm 命令不断中止
- firebase - 在页面访问时触发?