// 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>
Z przewodnika aktualizacji z wersji 1.x do 2.x:
<Link to>
, onEnter i isActive używają deskryptorów lokalizacji
<Link to>
może teraz oprócz napisów wziąć deskryptor lokalizacji. Zapytanie i właściwości stanu są przestarzałe.
// v1.0.x
<Link to="/foo" query={{ the: 'query' }}/>
// v2.0.0
<Link to={{ pathname: '/foo', query: { the: 'query' } }}/>
// Nadal ważne w 2.x
<Link to="/foo"/>
Podobnie, przekierowanie z punktu zaczepienia onEnter używa teraz również deskryptora lokalizacji.
// 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' } })
W przypadku niestandardowych komponentów podobnych do łącza to samo dotyczy router.isActive, wcześniej 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>
<Link to={'/ideas/'+this.props.testvalue }>{this.props.testvalue}</Link>
istnieje sposób, aby przekazać więcej niż jeden parametr. Możesz przekazać „do” jako obiekt zamiast łańcucha.
źródło
Miałem ten sam problem, aby wyświetlić szczegóły użytkownika z mojej aplikacji.
Możesz to zrobić:
lub
i
aby uzyskać to za pośrednictwem
this.props.match.params.value
klasy CreateIdeaView.Możesz zobaczyć ten film, który bardzo mi pomógł: https://www.youtube.com/watch?v=ZBxMljq9GSE
źródło
jeśli chodzi oreak-router-dom 4.xx ( https://www.npmjs.com/package/react-router-dom ), możesz przekazać parametry do komponentu, do którego ma zostać skierowany przez:
łączenie przez (biorąc pod uwagę, że właściwość testValue jest przekazywana do odpowiedniego komponentu (np. powyższego komponentu aplikacji) renderującego link)
przekazując właściwości do konstruktora komponentu, parametr value będzie dostępny za pośrednictwem
źródło
Zobacz ten post w celach informacyjnych
Proste jest to, że:
Teraz chcesz uzyskać do niego dostęp:
źródło
Po zainstalowaniu
react-router-dom
a drugi koniec, na którym trasa jest przekierowywana, zrób to
źródło
Aby wypracować powyższą odpowiedź ( https://stackoverflow.com/a/44860918/2011818 ), możesz również wysłać obiekty w wierszu „Do” w obiekcie Link.
źródło
Maszynopis
W przypadku podejścia wspomnianego w wielu odpowiedziach
Otrzymywałem błąd,
Następnie sprawdziłem oficjalną dokumentację, którą dostarczyli
state
w tym samym celu.Więc to działało tak,
W następnym komponencie możesz uzyskać tę wartość w następujący sposób:
źródło
Trasa:
A następnie można uzyskać dostęp params w składniku PageCustomer tak:
this.props.match.params.id
.Na przykład wywołanie interfejsu API w komponencie PageCustomer:
źródło