【问题标题】:How to Route User After Form Validation In React?React 表单验证后如何路由用户?
【发布时间】:2020-10-25 10:51:12
【问题描述】:

我是新来的 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 吗?

我该怎么做?

【问题讨论】:

    标签: javascript node.js reactjs express react-router


    【解决方案1】:

    假设您的 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。

    【讨论】:

    • 首先我需要安装历史模块?
    • 在您的情况下不需要...尝试一下,如果有问题,请告诉我...还分享您的路由器配置代码(如果您遇到问题)
    • 它在当前输入上工作,但是当输入错误的用户名或密码时,它在控制台上显示这样的磨损?
    • index.js:1 警告:无法对未安装的组件执行 React 状态更新。这是一个空操作,但它表明您的应用程序中存在内存泄漏。要解决此问题,请取消 componentWillUnmount 方法中的所有订阅和异步任务。在注册中(由 Context.Consumer 创建)
    • 我还安装了历史模块,但它的显示历史已定义但从未使用过
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-05
    • 2021-12-20
    • 2016-12-11
    • 1970-01-01
    相关资源
    最近更新 更多