Como podemos passar parâmetros this.props.history.push('/page')
no React-Router v4?
.then(response => {
var r = this;
if (response.status >= 200 && response.status < 300) {
r.props.history.push('/template');
});
reactjs
react-router
IshanGarg
fonte
fonte
Route
deve ter acesso athis.props.location
,this.props.history
, etc. Eu acho que você não precisa usarref
mais com v4. Tente fazerthis.props.history.push('/template');
props
para o componente que corresponde à rota? Eu acho que esse segmento do GitHub soluciona sua preocupação.Respostas:
Primeiro de tudo, você não precisa fazer
var r = this;
isso emif statement
se refere ao contexto do retorno de chamada em si, pois, como você está usando a função de seta, refere-se ao contexto do componente React.De acordo com os documentos:
Portanto, durante a navegação, você pode passar adereços para o objeto histórico, como
ou similarmente para o
Link
componente ou oRedirect
componentee, em seguida, no componente que é renderizado com a
/template
rota, você pode acessar os adereços passados comoLembre-se também de que, ao usar objetos de histórico ou localização de objetos, você precisa conectar o componente
withRouter
.De acordo com os documentos:
fonte
this.props.history.push('/template',response.data)
não está trabalhando. De acordo com a documentação depush(path, [state])
, você não acha que deve funcionar?você pode usar,
this.props.history.push("/template", { ...response })
outhis.props.history.push("/template", { response: response })
então você pode acessar os dados analisados do
/template
componente seguindo o código,const state = this.props.location.state
Leia mais sobre o React Session History Management
fonte
Para as versões anteriores :
E obtenha os dados no componente relacionado, como abaixo:
Para as versões mais recentes, a maneira acima funciona bem, mas existe uma nova maneira:
E obtenha os dados no componente relacionado, como abaixo:
Dica : o
state
nome da chave foi usado nas versões anteriores e, para versões mais recentes, você pode usar seu nome personalizado para transmitir dados e o uso dostate
nome não é essencial.fonte
Estendendo a solução (sugerida por Shubham Khatri) para uso com ganchos React (16,8 em diante):
Passando parâmetros com histórico de envio:
Acessando o parâmetro passado usando useLocation de 'react-router-dom':
fonte
Se você precisar passar parâmetros de URL
há uma ótima explicação de Tyler McGinnis em seu site, Link para o post
Aqui estão alguns exemplos de código:
no componente history.push:
this.props.history.push(`/home:${this.state.userID}`)
no componente do roteador, você define a rota:
<Route path='/home:myKey' component={Home} />
no componente Home:
fonte
Não é necessário usar withRouter. Isso funciona para mim:
Na sua página pai,
Em seguida, no ComponentA ou no ComponentB, você pode acessar
objeto, incluindo o método this.props.history.push.
fonte
withRouter
porque envolveu seu componenteBrowserRouter
, que funciona da mesma forma.props
conteúdo para cada componente que inclui ohistory
suporte.Para usar o React 16.8+ (withHooks), você pode usar desta maneira
Fonte aqui para ler mais https://reacttraining.com/react-router/web/example/auth-workflow
fonte
Adicione informações para obter parâmetros de consulta.
Para mais informações sobre URLSearchParams, verifique este link URLSearchParams
fonte