gpt4 book ai didi

javascript - 在 React 中如何在表单验证后路由用户?

转载 作者:行者123 更新时间:2023-12-05 05:01:20 25 4
gpt4 key购买 nike

我是 React 新手,正在尝试制作 SignUp SignIn 项目。

如果验证成功,我正在尝试将用户路由到登录/登录页面。

这是我的注册码。

import React, { Component } from 'react';
import { Link } from 'react-router-dom';
import Axios from 'axios';

const initianValue = {
username: '',
password: '',
nameError: '',
passError: '',
dataError: '',
};

class SignUp extends Component {
constructor(props) {
super(props);
this.state = initianValue;
this.handleInputChange = this.handleInputChange.bind(this);
this.handleSubmit = this.handleSubmit.bind(this);
}

handleInputChange = (e) => {
this.setState({
[e.target.name]: e.target.value,
});
};

validForm() {
let nameError = '';
let passError = '';
let dataError = '';

const user = {
username: this.state.username,
password: this.state.password,
};

if (!this.state.username) {
nameError = 'Enter Name';
}

if (user.username !== '' && user.password !== '') {
Axios.post('http://localhost:9000/checkUser', user)
.then((res) => this.setState({ dataError: res.data }))
.catch((err) => console.log(err));
}

if (!this.state.password) {
passError = 'Enter Password';
}

if (nameError || passError || dataError) {
this.setState({
nameError,
passError,
dataError,
});
return false;
}

return true;
}

handleSubmit = (e) => {
e.preventDefault();
const isvalid = this.validForm();
if (isvalid) {
this.setState(initianValue, () => this.props.history.push('/Signin'));
}
};

render() {
return (
<div className='Main'>
<span className='create'>Create Account</span>
<div className='SignUp'>
<form onSubmit={this.handleSubmit}>
<div className='form-group'>
<label>Username</label>
<input
type='text'
name='username'
value={this.state.username}
className='form-control'
onChange={this.handleInputChange}
/>
<div className='error'>
{this.state.nameError}
{this.state.dataError}
</div>
<br />
<label>Password</label>
<input
type='password'
name='password'
value={this.state.password}
className='form-control'
onChange={this.handleInputChange}
/>
<div className='error'>{this.state.passError}</div>
<br />

<button type='submit' className='btn btn-primary'>
Sign Up
</button>
</div>
</form>
</div>
<div className='signinForm'>
<label>
Already Have Account <Link to='/Signin'> Sign In </Link>
</label>
</div>
</div>
);
}
}

export default SignUp;

这是注册,完成后如果没有错误,我想将用户发送到登录页面或下一页。

我应该使用 Redux 吗?

我该怎么做?

最佳答案

假设您的 SignUp 组件包含在 Router 中,您的组件应该已经可以使用 `props 访问 history

因此您可以简单地执行此操作 this.props.history.push。在 setState 中使用第二个参数,这是一个有趣的设置状态后执行的参数(因为 setState 是异步的)

像这样

handleSubmit = (e) => {
e.preventDefault();
const isvalid = this.validForm();
if (isvalid) {
this.setState(initianValue, () => this.props.history.push("/dashboard"));//<----- like this
}
};

如果您的 SignUp 组件不在 Router 中,那么您可以使用 withRouter .只需将 Signup 传递给 withRouter hoc。

关于javascript - 在 React 中如何在表单验证后路由用户?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62736993/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com