Esta linha está ausente path
:
<Route name="ideas" handler={CreateIdeaView} />
Deveria estar:
<Route name="ideas" path="/:testvalue" handler={CreateIdeaView} />
Dado o seguinte Link
(v1 desatualizado) :
<Link to="ideas" params={{ testvalue: "hello" }}>Create Idea</Link>
Atualizado a partir da v4 :
const backUrl = '/some/other/value'
// this.props.testvalue === "hello"
<Link to={{pathname: `/${this.props.testvalue}`, query: {backUrl}}} />
e nos withRouter(CreateIdeaView)
componentes render()
:
console.log(this.props.match.params.testvalue, this.props.location.query.backurl)
// output
hello /some/other/value
No link que você publicou nos documentos, na parte inferior da página:
Dada uma rota como <Route name="user" path="/users/:userId"/>
Exemplo de código atualizado com alguns exemplos de consulta com stub:
// 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>
atualizações:
Consulte: https://github.com/ReactTraining/react-router/blob/0c6d51cd6639aff8a84b11d89e27887b3558ed8a/upgrade-guides/v2.0.0.md#link-to-onenter-and-isactive-use-location-descriptors
No guia de atualização de 1.x para 2.x:
<Link to>
, onEnter e isActive usam descritores de localização
<Link to>
agora pode usar um descritor de local além de strings. Os props de consulta e estado foram descontinuados.
// v1.0.x
<Link to="/foo" query={{ the: 'query' }}/>
// v2.0.0
<Link to={{ pathname: '/foo', query: { the: 'query' } }}/>
// Ainda válido no 2.x
<Link to="/foo"/>
Da mesma forma, o redirecionamento de um gancho onEnter agora também usa um descritor de local.
// 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' } })
Para componentes personalizados do tipo link, o mesmo se aplica ao router.isActive, anteriormente history.isActive.
// v1.0.x
history.isActive(pathname, query, indexOnly)
// v2.0.0
router.isActive({ pathname, query }, indexOnly)
atualizações para v3 a v4:
"documentação de migração herdada" para posteridade
/ideas/${this.props.testvalue}
}> {this.props.testvalue} </Link><Link to={`/ideas/${this.props.testvalue}`}>{this.props.testvalue}</Link>
com acentos graves<Link to={'/ideas/'+this.props.testvalue }>{this.props.testvalue}</Link>
existe uma maneira de você passar mais de um parâmetro. Você pode passar "para" como objeto em vez de sequência.
fonte
Eu tive o mesmo problema para mostrar um detalhe do usuário do meu aplicativo.
Você consegue fazer isso:
ou
e
para obter isso
this.props.match.params.value
na sua classe CreateIdeaView.Você pode ver este vídeo que me ajudou muito: https://www.youtube.com/watch?v=ZBxMljq9GSE
fonte
quanto ao react-router-dom 4.xx ( https://www.npmjs.com/package/react-router-dom ), você pode passar parâmetros para o componente para rotear via:
vinculação via (considerando que a prop testValue é passada para o componente correspondente (por exemplo, o componente App acima) renderizando o link)
passando adereços para o construtor de componentes, o valor param estará disponível via
fonte
Veja este post para referência
O simples é que:
Agora você deseja acessá-lo:
fonte
Após a instalação
react-router-dom
e outra extremidade onde a rota é redirecionada, faça isso
fonte
Para resolver a resposta acima ( https://stackoverflow.com/a/44860918/2011818 ), você também pode enviar os objetos embutidos na linha "Para" dentro do objeto Link.
fonte
Texto datilografado
Para uma abordagem mencionada dessa maneira em muitas respostas,
Eu estava recebendo erro,
Depois, verifiquei a documentação oficial que eles forneceram
state
para o mesmo objetivo.Então funcionou assim,
E no seu próximo componente, você pode obter esse valor da seguinte forma:
fonte
Rota:
E então pode acessar parâmetros no seu componente PageCustomer assim:
this.props.match.params.id
.Por exemplo, uma chamada de API no componente PageCustomer:
fonte