// import React, {Component, Props, ReactDOM} from 'react';
// import {Route, Switch} from 'react-router'; etc etc
// this snippet has it all attached to window since its in browser
const {
BrowserRouter,
Switch,
Route,
Link,
NavLink
} = ReactRouterDOM;
class World extends React.Component {
constructor(props) {
super(props);
console.dir(props);
this.state = {
fromIdeas: props.match.params.WORLD || 'unknown'
}
}
render() {
const { match, location} = this.props;
return (
<React.Fragment>
<h2>{this.state.fromIdeas}</h2>
<span>thing:
{location.query
&& location.query.thing}
</span><br/>
<span>another1:
{location.query
&& location.query.another1
|| 'none for 2 or 3'}
</span>
</React.Fragment>
);
}
}
class Ideas extends React.Component {
constructor(props) {
super(props);
console.dir(props);
this.state = {
fromAppItem: props.location.item,
fromAppId: props.location.id,
nextPage: 'world1',
showWorld2: false
}
}
render() {
return (
<React.Fragment>
<li>item: {this.state.fromAppItem.okay}</li>
<li>id: {this.state.fromAppId}</li>
<li>
<Link
to={{
pathname: `/hello/${this.state.nextPage}`,
query:{thing: 'asdf', another1: 'stuff'}
}}>
Home 1
</Link>
</li>
<li>
<button
onClick={() => this.setState({
nextPage: 'world2',
showWorld2: true})}>
switch 2
</button>
</li>
{this.state.showWorld2
&&
<li>
<Link
to={{
pathname: `/hello/${this.state.nextPage}`,
query:{thing: 'fdsa'}}} >
Home 2
</Link>
</li>
}
<NavLink to="/hello">Home 3</NavLink>
</React.Fragment>
);
}
}
class App extends React.Component {
render() {
return (
<React.Fragment>
<Link to={{
pathname:'/ideas/:id',
id: 222,
item: {
okay: 123
}}}>Ideas</Link>
<Switch>
<Route exact path='/ideas/:id/' component={Ideas}/>
<Route path='/hello/:WORLD?/:thing?' component={World}/>
</Switch>
</React.Fragment>
);
}
}
ReactDOM.render((
<BrowserRouter>
<App />
</BrowserRouter>
), document.getElementById('ideas'));
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-router-dom/4.3.1/react-router-dom.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-router/4.3.1/react-router.min.js"></script>
<div id="ideas"></div>
Aus der Upgrade-Anleitung von 1.x auf 2.x:
<Link to>
, onEnter und isActive verwenden Standortbeschreibungen
<Link to>
kann jetzt zusätzlich zu Zeichenfolgen einen Standortdeskriptor verwenden. Die Abfrage und Status Requisiten sind veraltet.
// v1.0.x.
<Link to="/foo" query={{ the: 'query' }}/>
// v2.0.0
<Link to={{ pathname: '/foo', query: { the: 'query' } }}/>
// Immer noch gültig in 2.x.
<Link to="/foo"/>
Ebenso wird beim Umleiten von einem onEnter-Hook jetzt auch ein Standortdeskriptor verwendet.
// v1.0.x.
(nextState, replaceState) => replaceState(null, '/foo')
(nextState, replaceState) => replaceState(null, '/foo', { the: 'query' })
// v2.0.0
(nextState, replace) => replace('/foo')
(nextState, replace) => replace({ pathname: '/foo', query: { the: 'query' } })
Für benutzerdefinierte linkartige Komponenten gilt das Gleiche für router.isActive, zuvor history.isActive.
// v1.0.x.
history.isActive(pathname, query, indexOnly)
// v2.0.0
router.isActive({ pathname, query }, indexOnly)
/ideas/${this.props.testvalue}
}> {this.props.testvalue} </ Link><Link to={`/ideas/${this.props.testvalue}`}>{this.props.testvalue}</Link>
, mit Backticks<Link to={'/ideas/'+this.props.testvalue }>{this.props.testvalue}</Link>
Es gibt eine Möglichkeit, mehr als einen Parameter zu übergeben. Sie können "to" als Objekt anstelle einer Zeichenfolge übergeben.
quelle
Ich hatte das gleiche Problem, ein Benutzerdetail aus meiner Anwendung anzuzeigen.
Du kannst das:
oder
und
um dies über
this.props.match.params.value
Ihre CreateIdeaView-Klasse zu erhalten.Sie können dieses Video sehen, das mir sehr geholfen hat: https://www.youtube.com/watch?v=ZBxMljq9GSE
quelle
Für React-Router-Dom 4.xx ( https://www.npmjs.com/package/react-router-dom ) können Sie Parameter an die Komponente übergeben, an die weitergeleitet werden soll:
Verknüpfung über (unter Berücksichtigung, dass testValue prop an die entsprechende Komponente (z. B. die obige App-Komponente) übergeben wird, die die Verknüpfung rendert)
Wenn Sie Requisiten an Ihren Komponentenkonstruktor übergeben, ist der Wertparameter über verfügbar
quelle
Siehe diesen Beitrag als Referenz
Das Einfache ist:
Jetzt möchten Sie darauf zugreifen:
quelle
Nach der Installation
react-router-dom
und an einem anderen Ende, an dem die Route umgeleitet wird, tun Sie dies
quelle
Um die obige Antwort ( https://stackoverflow.com/a/44860918/2011818 ) zu bearbeiten , können Sie die Objekte auch inline mit dem "An" im Link-Objekt senden.
quelle
Typoskript
Für einen Ansatz, der in vielen Antworten so erwähnt wird,
Ich habe einen Fehler bekommen,
Dann habe ich die offiziellen Unterlagen eingecheckt, die sie
state
für denselben Zweck bereitgestellt haben .Also hat es so funktioniert,
Und in Ihrer nächsten Komponente können Sie diesen Wert wie folgt erhalten:
quelle
Route:
Und dann können Sie wie folgt auf Parameter in Ihrer PageCustomer-Komponente zugreifen :
this.props.match.params.id
.Zum Beispiel ein API-Aufruf in der PageCustomer-Komponente:
quelle