// 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>
À partir du guide de mise à niveau de 1.x à 2.x:
<Link to>
, onEnter et isActive utilisent des descripteurs d'emplacement
<Link to>
peut désormais prendre un descripteur d'emplacement en plus des chaînes. Les accessoires de requête et d'état sont obsolètes.
// v1.0.x
<Link to="/foo" query={{ the: 'query' }}/>
// v2.0.0
<Link to={{ pathname: '/foo', query: { the: 'query' } }}/>
// Toujours valide en 2.x
<Link to="/foo"/>
De même, la redirection à partir d'un hook onEnter utilise désormais également un descripteur d'emplacement.
// 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' } })
Pour les composants de type lien personnalisés, il en va de même pour router.isActive, précédemment 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>
:, avec backticks<Link to={'/ideas/'+this.props.testvalue }>{this.props.testvalue}</Link>
il existe un moyen de transmettre plusieurs paramètres. Vous pouvez passer "à" comme objet au lieu de chaîne.
la source
J'ai eu le même problème pour afficher un détail d'utilisateur de mon application.
Tu peux le faire:
ou
et
pour l'obtenir via
this.props.match.params.value
votre classe CreateIdeaView.Vous pouvez voir cette vidéo qui m'a beaucoup aidé: https://www.youtube.com/watch?v=ZBxMljq9GSE
la source
comme pour react-router-dom 4.xx ( https://www.npmjs.com/package/react-router-dom ), vous pouvez passer des paramètres au composant à router via:
liaison via (considérant que la prop testValue est passée au composant correspondant (par exemple, le composant App ci-dessus) rendant le lien)
en passant des accessoires à votre constructeur de composants, le paramètre de valeur sera disponible via
la source
Voir cet article pour référence
Le simple est que:
Vous voulez maintenant y accéder:
la source
Après l'installation
react-router-dom
et l'autre extrémité où la route est redirigée, faites ceci
la source
Pour travailler sur la réponse ci-dessus ( https://stackoverflow.com/a/44860918/2011818 ), vous pouvez également envoyer les objets en ligne le «À» à l'intérieur de l'objet Lien.
la source
Manuscrit
Pour l'approche mentionnée comme celle-ci dans de nombreuses réponses,
Je recevais une erreur
Ensuite, j'ai vérifié la documentation officielle qu'ils ont fournie
state
dans le même but.Donc ça a fonctionné comme ça,
Et dans votre prochain composant, vous pouvez obtenir cette valeur comme suit,
la source
Route:
Et peut alors accéder params dans votre composant PageCustomer comme ceci:
this.props.match.params.id
.Par exemple, un appel d'API dans le composant PageCustomer:
la source