如何使用react钩子编写电子邮件和密码的验证



我正在该项目中进行React,我正试图通过使用react钩子但我不知道如何开始写它,所以请帮助实现这一点。我想要的是我在代码中硬编码的电子邮件和密码。现在我只想写电子邮件和密码的验证。我想要的是,如果我输入了错误的电子邮件和正确的密码,那么在验证中,它必须只显示请输入有效的电子邮件地址。如果我输入了正确的电子邮件,那么它必须显示请输入正确的密码。如果两者都是错误的,那么它必须显示验证,请输入正确的电子邮件和密码。

这是我的代码

import React, { useState } from 'react';
import './Login.css';
const Login = () => {
const [loginData, setLoginData] = useState(null)
const loginCredentials = () => {
if (loginData.email === 'john@gmail.com' && loginData.password === 'christina') {
} else {
}
}

const handleChange = ({ target }) => {
const { name, value } = target
const newData = Object.assign({}, loginData, { [name]: value })
setLoginData(newData)
}

const handleSubmit = (e) => {
e.preventDefault()
loginCredentials()
}  
return (
<div className='container'>
<div className='row justify-content-center'>
<div className='col-4'>
<div className='mainform mt-3'>
<form onSubmit={handleSubmit}>
<div className="form-group">
<label htmlFor="email">Email</label>
<input type="email" name='email' className="form-control" id="email" onChange={handleChange}></input>
</div>
<div className="form-group">
<label htmlFor="password">Password</label>
<input type="password" name='password' className="form-control" id="password" onChange={handleChange}></input>
</div>

<button type="submit"  className="btn btn-primary">Submit</button>
</form>
</div>
</div>
</div>
</div>
)
}
export default Login

尝试将错误保存在数组中,并在末尾检查数组的长度。

const [errors,setErrors]=useState([]);
.
.
.
if(username !='john@gmail.com')
{
setErrors([...errors,{error:'Invalid username'}])
}
if(password!='something')
{
setErrors([...errors,{error:'Invalid password'}])
}

现在组件内部

{errors?errors.map(elem=>elem.error):null}

您可以为错误消息创建一个状态,并根据电子邮件和密码的组合不正确来更改其值。如果

const [errorMessage, setErrorMessage] = useState('')
const loginCredentials = () => {
if (loginData.email !== 'john@gmail.com' && loginData.password !== 'christina') {
setErrorMessage('email and pw are both incorrect')
} else if (loginData.email !== 'john@gmail.com' {
setErrorMessage('email is incorrect')
} else if {.....etc
}

然后将{errorMessage}放在您的jsx中您希望它显示的位置

您可以使用嵌套if-else

const [error, setError] = useState("");
const loginCredentials = () => {
if (loginData.email === "john@gmail.com") {
if (loginData.password === "christina") {
setError("");
return true;
}
else
{
setError("Incorrect Password");
return false;
}
} else {
setError("Incorrect Email and password");
return false;
}
};

为了显示错误,您可以在表单中的某个位置放置一个div,该div只有在出现错误时才会显示。

{error && <div>{error}</div>}

首先,您的输入值不是受控元素。了解"受控组件"。

有很多方法可以实现这一点。我认为您可以添加一个自定义钩子来处理onChange和重置处理程序。

自定义挂钩:

import { useState } from 'react';
const useInputState = (initialValues) => {
const [state, setstate] = useState(initialValues);
const onChangeHandler = (e) => setstate({
...state,
[e.target.name]: e.target.value,
});
const reset = (field) => {
if (field) {
setstate({
...state,
[field]: initialValues[field],
});
} else {
setstate({
...initialValues,
});
}
};
return [state, onChangeHandler, reset];
};
export default useInputState;

然后使用组件中的钩子。

import React, { useState } from 'react';
import UseInputState from '../hooks/useInputState';
const App = () => {
const [value, onChangeHandler, reset] = UseInputState('');
console.log({ value });
const [emailAlert, setEmailAlert] = useState(null);
const [passwordAlert, setPasswordAlert] = useState(null);
const loginCredentials = () => {
setEmailAlert(null);
setPasswordAlert(null);
const { email, password } = value;
if (email !== 'john@gmail.com') {
setEmailAlert('Please Enter valid Email Address');
}
if (password !== 'christina') {
setPasswordAlert(' please enter correct password');
}
reset('');
if (password === 'christina' && email === 'john@gmail.com') {
setEmailAlert(null);
setPasswordAlert(null);
}
};
const handleSubmit = (e) => {
e.preventDefault();
loginCredentials();
};
return (
<div className='container'>
<div className='row justify-content-center'>
<div className='col-4'>
<div className='mainform mt-3'>
<form onSubmit={handleSubmit}>
<div className='form-group'>
<label htmlFor='email'>Email</label>
<input
type='email'
name='email'
className='form-control'
id='email'
value={value.email || ''}
onChange={onChangeHandler}
></input>
</div>
<div className='form-group'>
<label htmlFor='password'>Password</label>
<input
type='password'
name='password'
className='form-control'
id='password'
value={value.password || ''}
onChange={onChangeHandler}
></input>
</div>
<button type='submit' className='btn btn-primary'>
Submit
</button>
</form>
{emailAlert && <div>{emailAlert}</div>}
{passwordAlert && <div>{passwordAlert}</div>}
</div>
</div>
</div>
</div>
);
};
export default App;

相关内容

  • 没有找到相关文章

最新更新