Reagieren Sie auf der Weiterleitungsseite auf die Schaltfläche Reagieren

Lesezeit: 6 Minuten

Benutzer-Avatar
Raju dein Pepe

Ich arbeite an einer Webanwendung mit React und Bootstrap. Wenn es um die Anwendung von Button onClick geht, fällt es mir schwer, eine Seite auf eine andere umzuleiten. Wenn ich nach einem href nicht auf die andere Seite gehen kann.

Würden Sie mir bitte sagen, ob es notwendig ist, React-Navigation oder andere zu verwenden, um mit Button onClick auf der Seite zu navigieren?

import React, { Component } from 'react';
import { Button, Card, CardBody, CardGroup, Col, Container, Input, InputGroup, InputGroupAddon, InputGroupText, Row, NavLink  } from 'reactstrap';
 
class LoginLayout extends Component {
 
  render() {
    return (
 <div className="app flex-row align-items-center">
        <Container>
     ...
                    <Row>
                      <Col xs="6">                      
                        <Button color="primary" className="px-4">
                            Login
                         </Button>
                      </Col>
                      <Col xs="6" className="text-right">
                        <Button color="link" className="px-0">Forgot password?</Button>
                      </Col>
                    </Row>
               ...
        </Container>
      </div>
    );
  }
}
 

  • siehe dies http://stackoverflow.com/questions/31079081/…

    – aravind_reddy

    1. Juni 2018 um 13:58 Uhr

Benutzer-Avatar
aravind_reddy

aktualisieren:

Reaktionsrouter v6:

import React from 'react';
import { useNavigate } from "react-router-dom";
function LoginLayout() {
  
  let navigate = useNavigate(); 
  const routeChange = () =>{ 
    let path = `newPath`; 
    navigate(path);
  }
  
  return (
     <div className="app flex-row align-items-center">
      <Container>
      ...          
          <Button color="primary" className="px-4"
            onClick={routeChange}
              >
              Login
            </Button>
      ...
       </Container>
    </div>
  );
}}

Router v5 mit Hooks reagieren:

import React from 'react';
import { useHistory } from "react-router-dom";
function LoginLayout() {
  
  const history = useHistory();
  
  const routeChange = () =>{ 
    let path = `newPath`; 
    history.push(path);
  }

  return (
      <div className="app flex-row align-items-center">
        <Container>
          ...
          <Row>
            <Col xs="6">                      
              <Button color="primary" className="px-4"
                onClick={routeChange}
                  >
                  Login
                </Button>
            </Col>
            <Col xs="6" className="text-right">
              <Button color="link" className="px-0">Forgot password?</Button>
            </Col>
          </Row>
          ...
        </Container>
      </div>
  );
}
export default LoginLayout;

mit React Router v5:

import { useHistory } from 'react-router-dom';
import { Button, Card, CardBody, CardGroup, Col, Container, Input, InputGroup, InputGroupAddon, InputGroupText, Row, NavLink  } from 'reactstrap';
    
class LoginLayout extends Component {
  
  routeChange=()=> {
    let path = `newPath`;
    let history = useHistory();
    history.push(path);
  }

  render() {
    return (
      <div className="app flex-row align-items-center">
        <Container>
          ...
          <Row>
            <Col xs="6">                      
              <Button color="primary" className="px-4"
                onClick={this.routeChange}
                  >
                  Login
                </Button>
            </Col>
            <Col xs="6" className="text-right">
              <Button color="link" className="px-0">Forgot password?</Button>
            </Col>
          </Row>
          ...
        </Container>
      </div>
    );
  }
}

export default LoginLayout;

mit React Router v4:

import { withRouter } from 'react-router-dom';
import { Button, Card, CardBody, CardGroup, Col, Container, Input, InputGroup, InputGroupAddon, InputGroupText, Row, NavLink  } from 'reactstrap';
    
class LoginLayout extends Component {
  constuctor() {
    this.routeChange = this.routeChange.bind(this);
  }

  routeChange() {
    let path = `newPath`;
    this.props.history.push(path);
  }

  render() {
    return (
      <div className="app flex-row align-items-center">
        <Container>
          ...
          <Row>
            <Col xs="6">                      
              <Button color="primary" className="px-4"
                onClick={this.routeChange}
                  >
                  Login
                </Button>
            </Col>
            <Col xs="6" className="text-right">
              <Button color="link" className="px-0">Forgot password?</Button>
            </Col>
          </Row>
          ...
        </Container>
      </div>
    );
  }
}

export default withRouter(LoginLayout);

  • Nachdem ich den obigen Code verwendet habe, bin ich immer noch auf derselben Seite. Muss ich darüber hinaus weitere Arbeiten ausführen?

    – Rohit Sawai

    9. Dezember 2019 um 11:49 Uhr

  • Ich nehme an, nein .. hast du deine Komponente mit umwickelt withRouter ?

    – aravind_reddy

    9. Dezember 2019 um 11:58 Uhr

  • Können Sie es Sandbox hinzufügen und mir den Link geben, damit ich Ihr Problem besser lösen kann

    – aravind_reddy

    9. Dezember 2019 um 13:11 Uhr

  • Kann das in v5.1.2 mit Hooks nicht machen. React Hook "useHistory" is called in function "routeChange" which is neither a React function component or a custom React Hook function. Bearbeiten: Verschieben const history = useHistory() außerhalb des Handlers, wenn Sie mit diesem Problem konfrontiert sind.

    – Karkod

    6. Mai 2020 um 23:28 Uhr


  • Ich bin mir nicht sicher, ob dies nützlich ist, aber wenn Sie React Router v6 verwenden oder verwenden möchten, können Sie es nicht verwenden useHistory mehr. Sie haben es durch ersetzt useNavigate. const navigate = useNavigate(); navigate('../edit') Dies wird von /some/path/profile nach /some/path/edit verschoben

    – Puja Kulkarni

    2. Januar um 7:55


Verwenden Sie keine Schaltfläche als Link. Verwenden Sie stattdessen einen als Schaltfläche gestalteten Link.

<Link to="/signup" className="btn btn-primary">Sign up</Link>

  • Ich habe einen Fehler, nicht sicher, ob das damit zusammenhängt, link is a void element tag and must neither have `children` nor use `dangerouslySetInnerHTML`.

    – Jason Liu

    11. Mai 2021 um 20:47 Uhr

  • Das ist aber nicht die Frage.

    – Sören

    9. September 2021 um 23:43 Uhr

Reaktionsrouter v5.1.2:

import { useHistory } from 'react-router-dom';
const App = () => {
   const history = useHistory()
   <i className="icon list arrow left"
      onClick={() => {
        history.goBack()
   }}></i>
}

  • Ich bin bereits in der Zeile ‘const history = useHistory()’ wegen ‘TypeError: Cannot read property ‘history’ of undefined’ gescheitert. Haben Sie etwas von der React-Router-Dom in Ihrer index.js verwendet?

    – ostmond

    24. Januar 2020 um 10:16 Uhr

Benutzer-Avatar
rudresch solanki

Dies ist sehr einfach möglich, Sie müssen dafür keine andere Funktion oder Bibliothek verwenden.

onClick={event =>  window.location.href="https://stackoverflow.com/your-href"}

Benutzer-Avatar
Matthäus Barbosa

Ich habe versucht, einen Weg mit Redirect zu finden, bin aber gescheitert. OnClick umzuleiten ist einfacher als wir denken. Platzieren Sie einfach das folgende grundlegende JavaScript in Ihrer onClick-Funktion, kein Affentheater:

window.location.href="https://stackoverflow.com/questions/50644976/pagelink"

  • Achtung: Dadurch wird die Seite neu geladen.

    – James Poulose

    22. März 2020 um 4:19 Uhr

  • Ye, dies widerspricht dem Zweck der Verwendung von React, um eine Single-Page-Anwendung zu erstellen, wird dazu führen, dass Ihr gesamter Reaktionscode erneut gesendet wird usw. usw. (Dinge wie der Verlauf werden wahrscheinlich zurückgesetzt)

    – E.Serra

    13. November 2020 um 11:42 Uhr

Benutzer-Avatar
Azametzin

Importieren Sie es zuerst:

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

Dann, in Funktion oder Klasse:

const history = useHistory();

Schließlich steckst du es in die onClick Funktion:

<Button onClick={()=> history.push("/mypage")}>Click me!</Button>

  • Achtung: Dadurch wird die Seite neu geladen.

    – James Poulose

    22. März 2020 um 4:19 Uhr

  • Ye, dies widerspricht dem Zweck der Verwendung von React, um eine Single-Page-Anwendung zu erstellen, wird dazu führen, dass Ihr gesamter Reaktionscode erneut gesendet wird usw. usw. (Dinge wie der Verlauf werden wahrscheinlich zurückgesetzt)

    – E.Serra

    13. November 2020 um 11:42 Uhr

Benutzer-Avatar
Kareem Khaleel

Eine sehr einfache Möglichkeit, dies zu tun, ist die folgende:

onClick={this.fun.bind(this)}

und für die funktion:

fun() {
  this.props.history.push("/Home");
}

finlay müssen Sie mit Router importieren:

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

und exportiere es als:

export default withRouter (comp_name);

1245810cookie-checkReagieren Sie auf der Weiterleitungsseite auf die Schaltfläche Reagieren

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy