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:
objetos de histórico geralmente têm as seguintes propriedades e métodos:
Portanto, durante a navegação, você pode passar adereços para o objeto histórico, como
this.props.history.push({
pathname: '/template',
search: '?query=abc',
state: { detail: response.data }
})
ou similarmente para o Link
componente ou o Redirect
componente
<Link to={{
pathname: '/template',
search: '?query=abc',
state: { detail: response.data }
}}> My Link </Link>
e, em seguida, no componente que é renderizado com a /template
rota, você pode acessar os adereços passados como
this.props.location.state.detail
Lembre-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:
withRouter
Você pode obter acesso às propriedades do objeto histórico e a <Route>'s
correspondência mais próxima
por meio do withRouter
componente de ordem superior. withRouter
renderizará novamente seu componente toda vez que a rota for alterada com os mesmos acessórios que a <Route>
renderização props: { match, location, history }
.
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');