Przede wszystkim nie musisz tego robić, var r = this;ponieważ if statementodnosi się to do kontekstu samego wywołania zwrotnego, które ponieważ używasz funkcji strzałki, odnosi się do kontekstu komponentu React.
Według dokumentów:
obiekty historyczne mają zazwyczaj następujące właściwości i metody:
Podczas nawigacji możesz przekazywać rekwizyty do obiektu historii, takiego jak
this.props.history.push({
pathname: '/template',
search: '?query=abc',
state: { detail: response.data }
})
lub podobnie dla Linkkomponentu lub Redirectkomponentu
<Link to={{
pathname: '/template',
search: '?query=abc',
state: { detail: response.data }
}}> My Link </Link>
a następnie w komponencie renderowanym z /templatetrasą, możesz uzyskać dostęp do przekazanych rekwizytów jak
this.props.location.state.detail
Należy również pamiętać, że podczas korzystania z obiektów historii lub lokalizacji z rekwizytów należy połączyć komponent withRouter.
Zgodnie z Dokumentami:
withRouter
Możesz uzyskać dostęp do właściwości obiektu historii i najbliższego
<Route>'sdopasowania za pomocą withRouterkomponentu wyższego rzędu. withRouter
ponownie renderuje swój komponent za każdym razem, gdy trasa zmienia się z tymi samymi rekwizytami, co <Route>render props: { match, location, history }.
Routepowinni mieć dostęp dothis.props.location,this.props.historyitp Myślę, że nie trzeba używaćrefjuż z v4. Spróbuj zrobićthis.props.history.push('/template');