Прежде всего, вам не нужно делать 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');