So verwenden Sie Redirect in Version 5 von React-Router-Dom von Reactjs

Lesezeit: 5 Minuten

Benutzer-Avatar
maoooricio

Ich verwende das React-Router-Modul der letzten Version mit dem Namen React-Router-Dom, das bei der Entwicklung von Webanwendungen mit React zum Standard geworden ist. Ich möchte wissen, wie man nach einer POST-Anfrage eine Umleitung durchführt. Ich habe diesen Code erstellt, aber nach der Anfrage passiert nichts. Ich überprüfe im Internet, aber alle Daten beziehen sich auf frühere Versionen des Reaktionsrouters und nicht auf das letzte Update.

Code:

import React, { PropTypes } from 'react';
import ReactDOM from 'react-dom';
import { BrowserRouter } from 'react-router-dom';
import { Redirect } from 'react-router'

import SignUpForm from '../../register/components/SignUpForm';
import styles from './PagesStyles.css';
import axios from 'axios';
import Footer from '../../shared/components/Footer';

class SignUpPage extends React.Component {
  constructor(props) {
    super(props);

    this.state = {
      errors: {},
      client: {
        userclient: '',
        clientname: '',
        clientbusinessname: '',
        password: '',
        confirmPassword: ''
      }
    };

    this.processForm = this.processForm.bind(this);
    this.changeClient = this.changeClient.bind(this);
  }

  changeClient(event) {
    const field = event.target.name;
    const client = this.state.client;
    client[field] = event.target.value;

    this.setState({
      client
    });
  }

  async processForm(event) {
    event.preventDefault();

    const userclient = this.state.client.userclient;
    const clientname = this.state.client.clientname;
    const clientbusinessname = this.state.client.clientbusinessname;
    const password = this.state.client.password;
    const confirmPassword = this.state.client.confirmPassword;
    const formData = { userclient, clientname, clientbusinessname, password, confirmPassword };

    axios.post('/signup', formData, { headers: {'Accept': 'application/json'} })
      .then((response) => {
        this.setState({
          errors: {}
        });

        <Redirect to="https://stackoverflow.com/"/> // Here, nothings happens
      }).catch((error) => {
        const errors = error.response.data.errors ? error.response.data.errors : {};
        errors.summary = error.response.data.message;

        this.setState({
          errors
        });
      });
  }

  render() {
    return (
      <div className={styles.section}>
        <div className={styles.container}>
          <img src={require('./images/lisa_principal_bg.png')} className={styles.fullImageBackground} />
          <SignUpForm 
            onSubmit={this.processForm}
            onChange={this.changeClient}
            errors={this.state.errors}
            client={this.state.client}
          />
          <Footer />
        </div>
      </div>
    );
  }
}

export default SignUpPage;

  • Dein Redirect sieht aus wie JSX, nicht JS.

    – Elmeister

    5. April 2017 um 11:50 Uhr

  • können Sie den gesamten Komponentencode bereitstellen

    – KornholioBeavis

    5. April 2017 um 11:54 Uhr

  • Ja, ich verwende JSX. Nun, vielleicht muss ich das klarstellen. Die POST-Anfrage befindet sich innerhalb einer REACT-Komponente, die die Anfrage stellt.

    – maoooricio

    5. April 2017 um 11:55 Uhr

  • @KornholioBeavis, sicher, jetzt können Sie vollständig sehen. Ich mache den Server mit expressjs, ich weiß nicht, ob Sie diese Daten benötigen

    – maoooricio

    5. April 2017 um 12:00 Uhr

  • Können Sie bestätigen, dass Sie eine Rückrufantwort von axios.post erhalten? Warum verwenden Sie auch die asynchrone Funktion, ohne irgendwo zu warten?

    – KornholioBeavis

    5. April 2017 um 12:07 Uhr

Benutzer-Avatar
Thanh-Quy Nguyen

Mit React Router v5 können Sie jetzt einfach mit history.push() umleiten, dank der useHistory()-Hook:

import { useHistory } from "react-router-dom"

function HomeButton() {
  let history = useHistory()

  function handleClick() {
    history.push("/home")
  }

  return (
    <button type="button" onClick={handleClick}>
      Go home
    </button>
  )
}

  • Jetzt importieren wir alles aus react-router-dom.

    – Menai Ala Eddine – Aladdin

    27. April 2021 um 22:03 Uhr

  • Für einen deklarativeren Ansatz können Sie verwenden, persönlich bevorzuge ich den Hook-Ansatz (in der Antwort), wollte dies aber auch erwähnen:)

    – Uttkarsh Patel

    9. Februar um 19:01 Uhr


Benutzer-Avatar
Matthias Kohli

Hier ein kleines Beispiel als Antwort auf den Titel, da alle genannten Beispiele meiner Meinung nach ebenso kompliziert sind wie das offizielle.

Sie sollten wissen, wie man es2015 transpiliert und Ihren Server in die Lage versetzt, die Umleitung zu verarbeiten. Hier ist ein Ausschnitt für Express. Weitere Informationen hierzu finden Sie hier.

Stellen Sie sicher, dass Sie dies unter allen anderen Routen platzieren.

const app = express();
app.use(express.static('distApp'));

/**
 * Enable routing with React.
 */
app.get('*', (req, res) => {
  res.sendFile(path.resolve('distApp', 'index.html'));
});

Dies ist die .jsx-Datei. Beachten Sie, dass der längste Pfad zuerst kommt und allgemeiner wird. Verwenden Sie für die allgemeinsten Routen das exakte Attribut.

// Relative imports
import React from 'react';
import ReactDOM from 'react-dom';
import { BrowserRouter, Route, Switch, Redirect } from 'react-router-dom';

// Absolute imports
import YourReactComp from './YourReactComp.jsx';

const root = document.getElementById('root');

const MainPage= () => (
  <div>Main Page</div>
);

const EditPage= () => (
  <div>Edit Page</div>
);

const NoMatch = () => (
  <p>No Match</p>
);

const RoutedApp = () => (
  <BrowserRouter >
    <Switch>
      <Route path="/items/:id" component={EditPage} />
      <Route exact path="/items" component={MainPage} />          
      <Route path="/yourReactComp" component={YourReactComp} />
      <Route exact path="https://stackoverflow.com/" render={() => (<Redirect to="/items" />)} />          
      <Route path="*" component={NoMatch} />          
    </Switch>
  </BrowserRouter>
);

ReactDOM.render(<RoutedApp />, root); 

  • das geht nicht immer. wenn Sie eine Weiterleitung von haben home/hello > home/hello/1 aber dann geh zu home/hello und drücken Sie die Eingabetaste, es wird beim ersten Mal nicht umgeleitet. irgendwelche ideen warum??

    – Das Walross

    5. Januar 2018 um 14:10 Uhr

  • Ich rate Ihnen, wenn möglich “create-react-app” zu verwenden und der Dokumentation von “react-router” zu folgen. Mit “create-react-app” funktioniert bei mir alles bestens. Ich konnte meine eigene React-Anwendung nicht an den neuen React-Router anpassen.

    – Mathis Kohli

    7. Januar 2018 um 20:27 Uhr

Benutzer-Avatar
Vijay Vepakomma

HINWEIS: Beantworten Sie nur den Titel der Frage

Vorherige Version

<Redirect from="/old-url" to="/new-url" />

Letzte Version

<Route path="/old-url" element={<Navigate to="/new-url" />} />

  • das geht nicht immer. wenn Sie eine Weiterleitung von haben home/hello > home/hello/1 aber dann geh zu home/hello und drücken Sie die Eingabetaste, es wird beim ersten Mal nicht umgeleitet. irgendwelche ideen warum??

    – Das Walross

    5. Januar 2018 um 14:10 Uhr

  • Ich rate Ihnen, wenn möglich “create-react-app” zu verwenden und der Dokumentation von “react-router” zu folgen. Mit “create-react-app” funktioniert bei mir alles bestens. Ich konnte meine eigene React-Anwendung nicht an den neuen React-Router anpassen.

    – Mathis Kohli

    7. Januar 2018 um 20:27 Uhr

Benutzer-Avatar
GOLDENSPARROW MOBIL

Hallo, wenn Sie React-Router v-6.0.0-beta oder V6 in dieser Version verwenden, leiten Sie Änderungen so an Navigieren um

Importieren Sie {Navigieren} aus ‘React-Router-Dom’; // so RICHTIG in v6 import { Redirect } from ‘react-router-dom’; // so RICHTIG in v5

import { Redirect } from ‘react-router-dom’; // so FALSCH in v6 // Dies gibt dir einen Fehler in V6 von React-Router und React-Router dom

Bitte stellen Sie sicher, dass Sie beide dieselbe Version in package.json { “react-router”: “^6.0.0-beta.0”, //Like this “react-router-dom”: “^6.0.0-beta.0 “, // so was }

Die oben genannten Dinge funktionieren nur in React Router Version 6 gut

1010440cookie-checkSo verwenden Sie Redirect in Version 5 von React-Router-Dom von Reactjs

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

Privacy policy