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 Linkcomponente ou o Redirectcomponente
<Link to={{
pathname: '/template',
search: '?query=abc',
state: { detail: response.data }
}}> My Link </Link>
e, em seguida, no componente que é renderizado com a /templaterota, 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>'scorrespondência mais próxima
por meio do withRoutercomponente 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 }.
Routedeve ter acesso athis.props.location,this.props.history, etc. Eu acho que você não precisa usarrefmais com v4. Tente fazerthis.props.history.push('/template');