Ich versuche EINFACH mit dem React-Router ( Version ^ 1.0.3 ) zu tun , um zu einer anderen Ansicht umzuleiten, und ich werde nur müde.
import React from 'react';
import {Router, Route, Link, RouteHandler} from 'react-router';
class HomeSection extends React.Component {
static contextTypes = {
router: PropTypes.func.isRequired
};
constructor(props, context) {
super(props, context);
}
handleClick = () => {
console.log('HERE!', this.contextTypes);
// this.context.location.transitionTo('login');
};
render() {
return (
<Grid>
<Row className="text-center">
<Col md={12} xs={12}>
<div className="input-group">
<span className="input-group-btn">
<button onClick={this.handleClick} type="button">
</button>
</span>
</div>
</Col>
</Row>
</Grid>
);
}
};
HomeSection.contextTypes = {
location() {
React.PropTypes.func.isRequired
}
}
export default HomeSection;
Alles was ich brauche ist die Verwendung an '/ login' zu senden und das wars.
Was kann ich tun ?
Fehler in der Konsole:
Nicht erfasster Referenzfehler: PropTypes ist nicht definiert
Datei mit meinen Routen
// LIBRARY
/*eslint-disable no-unused-vars*/
import React from 'react';
/*eslint-enable no-unused-vars*/
import {Route, IndexRoute} from 'react-router';
// COMPONENT
import Application from './components/App/App';
import Contact from './components/ContactSection/Contact';
import HomeSection from './components/HomeSection/HomeSection';
import NotFoundSection from './components/NotFoundSection/NotFoundSection';
import TodoSection from './components/TodoSection/TodoSection';
import LoginForm from './components/LoginForm/LoginForm';
import SignupForm from './components/SignupForm/SignupForm';
export default (
<Route component={Application} path='/'>
<IndexRoute component={HomeSection} />
<Route component={HomeSection} path='home' />
<Route component={TodoSection} path='todo' />
<Route component={Contact} path='contact' />
<Route component={LoginForm} path='login' />
<Route component={SignupForm} path='signup' />
<Route component={NotFoundSection} path='*' />
</Route>
);
javascript
reactjs
Reagieren
quelle
quelle
routes
Definitionen veröffentlichen und auch, wenn es einen Grund gibt, warum Sie keineLink
Komponente verwenden? Erwähnen Sie auch, welche Fehler Sie erhalten.<Link to="/login">Log In</Link>
?Uncaught ReferenceError
rufen Sie als anPropTypes
, aber Sie importieren das nicht, Sie müssen PropTypes als sich selbst importieren oder verwendenReact.PropTypes
react-router
API-Änderung innerhalb von 5 Minuten .. haha Scherz, aber nur teilweiseAntworten:
Für die einfache Antwort können Sie anstelle von die
Link
Komponente vonreact-router
verwendenbutton
. Es gibt Möglichkeiten, die Route in JS zu ändern, aber anscheinend brauchen Sie das hier nicht.Um dies programmgesteuert in 1.0.x zu tun, gefällt Ihnen dies in Ihrer clickHandler-Funktion:
this.history.pushState(null, 'login');
Entnommen aus dem Upgrade-Dokument hier
Sie sollten
this.history
Ihre Route-Handler-Komponente von platziert habenreact-router
. Wenn es sich um eine untergeordnete Komponente handelt, die unter der in derroutes
Definition genannten liegt, müssen Sie diese möglicherweise weitergebenquelle
if (true) { // redirect to login}
einfügen , wie zum Beispiel: Deshalb habe ich das in einen onClick eingefügt Funktion{validation && <Link to="/login" />Click to login</Link>}
. Wenn die Validierung falsch ist, wird nichts gerendert.1) React-Router> V5-
useHistory
Hook:Wenn Sie über
React >= 16.8
funktionale Komponenten verfügen , können Sie denuseHistory
Hook des React-Routers verwenden .2) React-Router> V4
withRouter
HOC:Wie @ambar in den Kommentaren erwähnt hat, hat React-Router seine Codebasis seit V4 geändert. Hier sind die Dokumentationen - offiziell , mit Router
3) React-Router <V4 mit
browserHistory
Sie können diese Funktionalität mit dem React-Router erreichen
BrowserHistory
. Code unten:4) Redux
connected-react-router
Wenn Sie Ihre Komponente mit Redux verbunden und den Router für verbundene Reaktionen konfiguriert haben, müssen
this.props.history.push("/new/url");
SiewithRouter
lediglich HOC nichthistory
in die Komponenten-Requisiten injizieren .quelle
react-router-dom
tutWenn ein Benutzer beispielsweise auf einen Link klickt,
<Link to="/" />Click to route</Link>
sucht der React-Router/
und Sie könnenRedirect to
den Benutzer verwenden und an eine andere Stelle wie die Anmelderoute senden.Aus den Dokumenten für ReactRouterTraining :
quelle
<Redirect> elements are for router configuration only and should not be rendered
.Einfachste Lösung für das Web!
Aktuelle 2020
bestätigte die Zusammenarbeit mit:
Benutze den
useHistory()
Haken!quelle
Mit React-Router v2.8.1 (wahrscheinlich auch andere 2.xx-Versionen, aber ich habe es nicht getestet) können Sie diese Implementierung verwenden, um eine Router-Umleitung durchzuführen.
quelle
Die einfachste Lösung ist:
quelle