登录后反应路由如果有条件

问题描述 投票:1回答:1

我对路由反应有疑问。问题是我尝试在我的代码中登录后重定向到一个路由。

我读到了react-router-dom并尝试使用但不做任何事情。之后读取堆栈abot history.push但它不起作用,也许问题是我需要创建一个组件.js来调用和重定向他但我觉得有点迷失在这。对不起,对不起。

这是我创建登录的地方:

import React, { Component } from 'react';
import './App.css';
import { Card, Button,CardBody,Container, Row, Col, Form, InputGroup,
  InputGroupAddon, InputGroupText, Input, FormGroup } from 'reactstrap';
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
import { faUser,faKey } from '@fortawesome/free-solid-svg-icons';
import axios from 'axios';
import { BrowserRouter as Router, Route, Link,Redirect } from "react-router-dom";
import PanelUsuario from './PanelUsuario';

class App extends Component {


  constructor (props) {
    super(props)

    this.state = {errors: []}
  }



  setErrors = (...errors) => {
    this.setState({errors})
  }

    handleSubmit = (e) => {

      e.preventDefault();

      const user = {
        usuario:  this.usuario.value,
        contraseña: this.password.value
      }


      axios.post(`http://api`,  user )
      .then(res => {
        this.setState({
          data: res.data,
          loading: true        
        });

        if (Object.keys(res.data).length > 0) {

          return <Redirect to ="PanelUsuario"/>

          } else {

          this.setErrors('Wrong user or Password')
        }
      })

    }

  render() {

    return (


        <Container>  
          <Form onSubmit={this.handleSubmit}>
            <Row> 
              <Col  md="4"></Col>
              <Col  md="4">
                <Card>

                  <CardBody>

                    <FormGroup>
                     <InputGroup>
                      <InputGroupAddon addonType="append">   
                        <InputGroupText> 
                          <FontAwesomeIcon icon={ faUser }/> 
                        </InputGroupText>  
                      </InputGroupAddon>
                      <Input placeholder="Usuario" type="text" innerRef={(element) => { this.usuario = element }} />                      
                       </InputGroup>
                    </FormGroup>


                    <FormGroup>
                      <InputGroup>
                        <InputGroupAddon addonType="append">   
                          <InputGroupText> 
                            <FontAwesomeIcon icon={ faKey }/> 
                          </InputGroupText>  
                        </InputGroupAddon>
                        <Input placeholder="Password"  type="password" innerRef={(element) => { this.password = element }}  />
                        </InputGroup>
                    </FormGroup>



                  <Row>
                    <Col  md="8"></Col>
                    <Col  md="4">
                      <Button color="success"  >Login</Button>
                    </Col>
                  </Row>
                  </CardBody>
                </Card>
              </Col>
              <Col md="4"></Col>
            </Row>
          </Form>

          <Row>
            <Col md="4"></Col>
            <Col md="4">
              <div className="text-center mensaje">
              {this.state.errors}
              </div>
            </Col>
            <Col md="4"></Col>
         </Row> 
        <Router>
        <Route path="PanelUsuario" component={PanelUsuario} />

        </Router>
        </Container>

    );
  }
}

export default App;

这是我的第二个观点(是一个关于路由的例子,从这里它的工作正常。

import React from "react";
import { BrowserRouter as Router, Route, Link } from "react-router-dom";
import App from './App';

function Index() {
  return <h2>Home</h2>;
}

function About() {
  return <h2>About</h2>;
}

function Users() {
  return <h2>Users</h2>;
}

function PanelUsuario() {
  return (
    <Router>
      <div>
        <nav>
          <ul>
            <li>
              <Link to="/">Home</Link>
            </li>
            <li>
              <Link to="/about/">About</Link>
            </li>
            <li>
              <Link to="/users/">Users</Link>
            </li>
            <li>
              <Link to="/App/">App</Link>
            </li>
          </ul>
        </nav>

        <Route path="/" exact component={Index} />
        <Route path="/about/" component={About} />
        <Route path="/users/" component={Users} />
        <Route path="/App/" component={App}  />
      </div>
    </Router>
  );
}
export default PanelUsuario;
javascript reactjs
1个回答
0
投票

你尝试过使用{ withRouter }React-router-dom吗?

您可以访问匹配,位置和历史记录道具,以便将新条目推送到历史堆栈或替换历史堆栈上的当前条目

https://reacttraining.com/react-router/web/api/withRouter

https://reacttraining.com/react-router/web/api/history

import { withRouter } from 'react-router-dom';

class App extends Component {
  // Gained access to {match, history, location} from props;
  ...
}

export default withRouter(App)
© www.soinside.com 2019 - 2024. All rights reserved.