Как мы можем передать параметр this.props.history.push('/page')
в React-Router v4?
.then(response => {
var r = this;
if (response.status >= 200 && response.status < 300) {
r.props.history.push('/template');
});
reactjs
react-router
IshanGarg
источник
источник
Route
должен иметь доступ кthis.props.location
,this.props.history
и т.д. Я думаю , что вам не нужно использоватьref
больше с v4. Попробуйте сделатьthis.props.history.push('/template');
props
на компонент, который соответствует маршруту? Я думаю, что этот поток GitHub решает вашу проблему.Ответы:
Прежде всего, вам не нужно делать
var r = this;
это, поскольку этоif statement
относится к контексту самого обратного вызова, который, поскольку вы используете функцию стрелки, относится к контексту компонента React.Согласно документам:
Таким образом, во время навигации вы можете передавать реквизиты для объекта истории, как
или аналогично для
Link
компонента илиRedirect
компонентаа затем в компоненте, который отображается с
/template
маршрутом, вы можете получить доступ к пропущенным реквизитам, какТакже имейте в виду, что при использовании объектов истории или местоположения из реквизита необходимо подключить компонент
withRouter
.Согласно документам:
источник
this.props.history.push('/template',response.data)
не работает. Согласно документамpush(path, [state])
, вы не думаете, что это должно работать?ты можешь использовать,
this.props.history.push("/template", { ...response })
илиthis.props.history.push("/template", { response: response })
тогда вы можете получить доступ к проанализированным данным из
/template
компонента, следуя коду,const state = this.props.location.state
Узнайте больше о React Session History Management
источник
Для более ранних версий:
И получите данные в связанном компоненте, как показано ниже:
Для более новых версий вышеуказанный способ работает хорошо, но есть новый способ:
И получите данные в связанном компоненте, как показано ниже:
Подсказка :
state
имя ключа использовалось в более ранних версиях, а для более новых версий вы можете использовать свое пользовательское имя для передачи данных, и использованиеstate
имени не является обязательным.источник
Расширение решения (предложенного Шубхам Хатри) для использования с крючками React (16.8 и далее):
Передача параметров с историей push:
Доступ к переданному параметру с использованием useLocation из'act-router-dom ':
источник
Если вам нужно передать параметры URL
Theres большое сообщение объяснение Тайлер Макгиннис на своем сайте, ссылка на пост
Вот примеры кода:
на компоненте history.push:
this.props.history.push(`/home:${this.state.userID}`)
на компоненте роутера вы определяете маршрут:
<Route path='/home:myKey' component={Home} />
на домашнем компоненте:
источник
Не нужно использовать с рутером. Это работает для меня:
На вашей родительской странице
Затем в ComponentA или ComponentB вы можете получить доступ
объект, включая метод this.props.history.push.
источник
withRouter
потому что вы обернули свой компонентBrowserRouter
, который работает так же.props
вниз в каждый компонент, который включает в себяhistory
опору.Чтобы использовать React 16.8+ (с крючками), вы можете использовать этот способ
Источник здесь, чтобы прочитать больше https://reacttraining.com/react-router/web/example/auth-workflow
источник
Добавить информацию, чтобы получить параметры запроса.
Для получения дополнительной информации о URLSearchParams проверьте эту ссылку URLSearchParams
источник