简体   繁体   English

登录反应js后如何渲染到家?

[英]how to render to home after login in react js?

I am learning reactjs and I came across this problem and I have not been able to solve it even looking on the internet.我正在学习 reactjs 并且遇到了这个问题,即使在互联网上查看也无法解决。 I have created a login with their respective validations but I don't know how to render after clicking the button and I want that once I log in, it redirects me to the main page of my application.我已经创建了一个带有各自验证的登录名,但我不知道单击按钮后如何呈现,我希望一旦我登录,它将我重定向到我的应用程序的主页。

this is App.js这是 App.js

import React from 'react';
import './App.css';
import LoginForm from '../src/forms/Login/LoginForm';
import Logo from '../src/components/Logo';
import Footer from './Footer';

function App() {
  return (
    <>
      <Logo />
      <div className='login-form'>
        <LoginForm />
      </div>
      <Footer />
    </>
  );
}

export default App;

and this is LoginForm.js这是 LoginForm.js

import React from "react";
import 'bootstrap/dist/css/bootstrap.min.css';
import { Formik } from "formik";
import * as Yup from "yup";
import Form from '../../../node_modules/react-bootstrap/Form';
import FormGroup from '../../../node_modules/react-bootstrap/FormGroup';
import Button from '../../../node_modules/react-bootstrap/Button';
import Home from '../../pages/Home';
import { BrowserRouter as Redirect } from 'react-router-dom';

class LoginForm extends React.Component{
    state = {
        islogged: false,
        loginParams: {
            email: "",
            password: ""
        }
    };

    handleFormChange = event => {
        let loginParamsNew = { ...this.state.loginParams };
        let val = event.target.value;
        loginParamsNew[event.target.name] = val;
        this.setState({
            loginParams: loginParamsNew
        });
    };

    login = event => {
        let email = this.state.loginParams.email;
        let password = this.state.loginParams.password;
        if (email === "admin@admin.com" && password === "abcd1234") {
            localStorage.setItem("token", "T");
            this.setState({
                islogged: true
            });
        }
        event.preventDefault();
    };

    handleonClick = event => {
        console.log('entro');
        if(this.islogged){
            return(
                <Redirect>
                    <Home />
                </Redirect>
        )}
    };

    render(){
        return(
            <Formik initialValues={{ email: "", password: "" }} onSubmit={(values, { setSubmitting }) => {
                setTimeout(() => {setSubmitting(false);}, 500);}} validationSchema={Yup.object().shape({
                email: Yup.string().email().required("*Campo Requerido"),
                password: Yup.string().required("*Campo Requerido")
                .min(8,"La contraseña es demasiado corta; debe tener un mínimo de 8 caracteres.")
                .matches(/(?=.*[0-9])/, "La contraseña debe contener un número.")})}>
            {(props) => { const { values, touched, errors, isSubmitting, handleChange, handleBlur, handleSubmit } = props;
                return (
                <Form onSubmit={handleSubmit}>
                    <h3>Iniciar Sesion</h3>
                    <FormGroup>
                    <Form.Label htmlFor="email">Email</Form.Label>
                    <Form.Control name="email" type="text" placeholder="Ingresar correo..." value={values.email} onChange={handleChange}
                        onBlur={handleBlur} className={errors.email && touched.email && "error"}/>
                    {errors.email && touched.email && (
                        <div className="input-feedback">{errors.email}</div>
                    )}
                    </FormGroup>
                    <FormGroup>
                    <Form.Label htmlFor="email">Contraseña</Form.Label>
                    <Form.Control name="password" type="password" placeholder="Ingresar contraseña..." value={values.password} onChange={handleChange}
                        onBlur={handleBlur} className={errors.password && touched.password && "error"}/>
                    {errors.password && touched.password && (
                        <div className="input-feedback">{errors.password}</div>
                    )}
                    </FormGroup>
                    <Button type="submit" variant="outline-danger" block disabled={isSubmitting} onClick={(event) => this.handleonClick(event)}>Iniciar Sesion</Button>
                    <div style={{textAlign:"center",margin:"5px"}}>
                        <a href='/#'>Olvido su contraseña?</a>
                    </div>   
                </Form>
                );
            }}
            </Formik>
        );
    }
}

export default LoginForm;

When I click the button it doesn't redirect to the control panel / menu and I don't know what I'm doing wrong.当我单击按钮时,它不会重定向到控制面板/菜单,我不知道我做错了什么。

this is my handleonClick这是我的handleonClick

handleonClick = event => {
        console.log('entro');
        if(this.islogged){
            return(
                <Redirect>
                    <Home />
                </Redirect>
        )}
    };

So that in the end, I can see my dashboards and menu.最后,我可以看到我的仪表板和菜单。

this is dashboard/Menu Home.js这是仪表板/菜单 Home.js

import React from 'react';
import Navbar from '../components/Navbar';
import { BrowserRouter as Router, Switch, Route } from 'react-router-dom';
import Reports from './Reports';
import Products from './Products';
import Users from './Users';

function Home() {
  return (
    <div className='home'>
      <Router>
        <Navbar />
        <Switch>
          <Route path='/users' component={Users} />
          <Route path='/reports' component={Reports} />
          <Route path='/products' component={Products} />
        </Switch>
      </Router>
    </div>
  );
}

export default Home;

¿Can someone give me a help to continue programming? ¿ 有人可以帮我继续编程吗? Very very thanks...非常非常感谢...

u need set path of home component so u can redirect it by it's path not the component don't forget to passing all props {...props}你需要设置主组件的路径,这样你就可以通过它的路径而不是组件来重定向它不要忘记传递所有道具 {...props}
option1选项1

handleonClick = (e) => {
if(this.islogged){
   this.props.history.push("/login")}
}

option 2选项 2

import React from "react";
import 'bootstrap/dist/css/bootstrap.min.css';
import { Formik } from "formik";
import * as Yup from "yup";
import Form from '../../../node_modules/react-bootstrap/Form';
import FormGroup from '../../../node_modules/react-bootstrap/FormGroup';
import Button from '../../../node_modules/react-bootstrap/Button';
import Home from '../../pages/Home';
import { BrowserRouter as Redirect } from 'react-router-dom';

class LoginForm extends React.Component{
    state = {
        islogged: false,
        loginParams: {
            email: "",
            password: ""
        },
        allowLogin:false
    };

    handleFormChange = event => {
        let loginParamsNew = { ...this.state.loginParams };
        let val = event.target.value;
        loginParamsNew[event.target.name] = val;
        this.setState({
            loginParams: loginParamsNew
        });
    };

    login = event => {
        let email = this.state.loginParams.email;
        let password = this.state.loginParams.password;
        if (email === "admin@admin.com" && password === "abcd1234") {
            localStorage.setItem("token", "T");
            this.setState({
                islogged: true
            });
        }
        event.preventDefault();
    };

    handleonClick = event => {
        console.log('entro');
        if(this.islogged){
            this.setState({
              allowLogin:true
            })
      }
    };

    render(){
        return(
            <Formik initialValues={{ email: "", password: "" }} onSubmit={(values, { setSubmitting }) => {
                setTimeout(() => {setSubmitting(false);}, 500);}} validationSchema={Yup.object().shape({
                email: Yup.string().email().required("*Campo Requerido"),
                password: Yup.string().required("*Campo Requerido")
                .min(8,"La contraseña es demasiado corta; debe tener un mínimo de 8 caracteres.")
                .matches(/(?=.*[0-9])/, "La contraseña debe contener un número.")})}>
            {(props) => { const { values, touched, errors, isSubmitting, handleChange, handleBlur, handleSubmit } = props;
                return (
                <Form onSubmit={handleSubmit}>
                    <h3>Iniciar Sesion</h3>
                    <FormGroup>
                    <Form.Label htmlFor="email">Email</Form.Label>
                    <Form.Control name="email" type="text" placeholder="Ingresar correo..." value={values.email} onChange={handleChange}
                        onBlur={handleBlur} className={errors.email && touched.email && "error"}/>
                    {errors.email && touched.email && (
                        <div className="input-feedback">{errors.email}</div>
                    )}
                    </FormGroup>
                    <FormGroup>
                    <Form.Label htmlFor="email">Contraseña</Form.Label>
                    <Form.Control name="password" type="password" placeholder="Ingresar contraseña..." value={values.password} onChange={handleChange}
                        onBlur={handleBlur} className={errors.password && touched.password && "error"}/>
                    {errors.password && touched.password && (
                        <div className="input-feedback">{errors.password}</div>
                    )}
                    </FormGroup>
                    <Button type="submit" variant="outline-danger" block disabled={isSubmitting} onClick={(event) => this.handleonClick(event)}>Iniciar Sesion</Button>
                    <div style={{textAlign:"center",margin:"5px"}}>
                        <a href='/#'>Olvido su contraseña?</a>
                    </div>   
                </Form>
                );
            }}
           {this.state.allowLogin===true ? <Redirect to="/home" /> : <Redirect to="/" />}
            </Formik>
            
        );
    }
}

export default LoginForm;

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM