Ich habe einen Router wie folgt:
<Router history={hashHistory}>
<Route path="/" component={App}>
<IndexRoute component={Index}/>
<Route path="login" component={Login}/>
</Route>
</Router>
Folgendes möchte ich erreichen:
/login
, falls nicht angemeldet/login
zuzugreifen, wenn sie bereits angemeldet sind, leiten Sie sie an root_/
weiter.jetzt versuche ich den Status des Benutzers in App
s componentDidMount
zu überprüfen. Dann mache ich etwas wie:
if (!user.isLoggedIn) {
this.context.router.Push('login')
} else if(currentRoute == 'login') {
this.context.router.Push('/')
}
Das Problem hierbei ist, dass ich die API nicht finden kann, um die aktuelle Route abzurufen.
Ich fand dieses geschlossene Problem schlug die Verwendung von Router.ActiveState-Mix- und -Route-Handlern vor, aber es sieht so aus, als wären diese beiden Lösungen nun veraltet.
Nachdem ich ein weiteres Dokument gelesen hatte, fand ich die Lösung:
https://github.com/ReactTraining/react-router/blob/master/packages/react-router/docs/api/location.md
Ich muss nur auf die injizierte Eigenschaft location
der Instanz der Komponente zugreifen:
var currentLocation = this.props.location.pathname
Sie können die aktuelle Route mit aufrufen
const currentRoute = this.props.routes[this.props.routes.length - 1];
... wodurch Sie auf die Requisiten von der untersten Ebene der aktiven <Route ...>
-Komponente zugreifen können.
Gegeben...
<Route path="childpath" component={ChildComponent} />
currentRoute.path
gibt 'childpath'
zurück und currentRoute.component
gibt function _class() { ... }
zurück.
Wenn Sie den Verlauf verwenden, hat der Router alles aus dem Verlauf in den Speicherort eingefügt, z.
this.props.location.pathname;
this.props.location.query;
kapiert?
Ab Version 3.0.0 können Sie die aktuelle Route abrufen, indem Sie Folgendes aufrufen:
this.context.router.location.pathname
Beispielcode ist unten:
var NavLink = React.createClass({
contextTypes: {
router: React.PropTypes.object
},
render() {
return (
<Link {...this.props}></Link>
);
}
});
Für alle Benutzer, die 2017 dasselbe Problem hatten, habe ich es folgendermaßen gelöst:
NavBar.contextTypes = {
router: React.PropTypes.object,
location: React.PropTypes.object
}
und benutze es so:
componentDidMount () {
console.log(this.context.location.pathname);
}
Sie können die 'isActive'-Requisite wie folgt verwenden:
const { router } = this.context;
if (router.isActive('/login')) {
router.Push('/');
}
isActive gibt ein wahr oder falsch zurück.
Getestet mit Reakt-Router 2.7
versuchen Sie es in App.js window.location.pathname
Funktioniert für mich genauso:
...
<MyComponent {...this.props}>
<Route path="path1" name="pname1" component="FirstPath">
...
</MyComponent>
...
Und dann kann ich in der Funktion MyComponent auf "this.props.location.pathname" zugreifen.
Ich habe vergessen, dass es ich war ...))) Der folgende Link beschreibt mehr für Make-Navigationsleiste etc .: reag Router this.props.location