Перш за все, вам цього не потрібно робити, 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
.
Відповідно до Документів:
зРутер
Ви можете отримати доступ до властивостей об’єкта історії та найближчої
<Route>'s
відповідності через withRouter
компонент вищого порядку. withRouter
буде рендерировать його компонент кожного разу, коли маршрут змінюється тим же реквізитом, що і <Route>
рендер props: { match, location, history }
.
Route
повинен мати доступ доthis.props.location
,this.props.history
і т.д. Я думаю , що вам не потрібно використовуватиref
більше з v4. Спробуйте зробитиthis.props.history.push('/template');