Прежде всего, вам не нужно делать var r = this;это, поскольку это if statementотносится к контексту самого обратного вызова, который, поскольку вы используете функцию стрелки, относится к контексту компонента React.
Согласно документам:
Объекты истории обычно имеют следующие свойства и методы:
Таким образом, во время навигации вы можете передавать реквизиты для объекта истории, как
this.props.history.push({
pathname: '/template',
search: '?query=abc',
state: { detail: response.data }
})
или аналогично для Linkкомпонента или Redirectкомпонента
<Link to={{
pathname: '/template',
search: '?query=abc',
state: { detail: response.data }
}}> My Link </Link>
а затем в компоненте, который отображается с /templateмаршрутом, вы можете получить доступ к пропущенным реквизитам, как
this.props.location.state.detail
Также имейте в виду, что при использовании объектов истории или местоположения из реквизита необходимо подключить компонент withRouter.
Согласно документам:
withRouter
Вы можете получить доступ к свойствам объекта истории и ближайшему
<Route>'sсовпадению через withRouterкомпонент высшего порядка. withRouter
будет повторять рендеринг своего компонента каждый раз, когда маршрут изменяется с теми же параметрами, что и <Route>рендер props: { match, location, history }.
Routeдолжен иметь доступ кthis.props.location,this.props.historyи т.д. Я думаю , что вам не нужно использоватьrefбольше с v4. Попробуйте сделатьthis.props.history.push('/template');