Поскольку я использую response-router для обработки моих маршрутов в приложении реагирования, мне любопытно, есть ли способ перенаправления на внешний ресурс.
Скажите, что кто-то ударил:
example.com/privacy-policy
Я хочу перенаправить его на:
example.zendesk.com/hc/en-us/articles/123456789-Privacy-Policies
Я не нашел никакой помощи в том, чтобы избежать написания его на простом JS при загрузке index.html с чем-то вроде:
if ( window.location.path === "privacy-policy" ){
window.location = "example.zendesk.com/hc/en-us/articles/123456789-Privacy-Policies"
}
javascript
reactjs
redirect
react-router
react-router-redux
Эрик Годонски
источник
источник
window.location.href
на формальное перенаправление.Ответы:
Вот однострочный пример использования React Router для перенаправления на внешнюю ссылку:
Он использует концепцию чистого компонента React, чтобы свести код компонента к одной функции, которая вместо того, чтобы отображать что-либо, перенаправляет браузер на внешний URL-адрес.
Работает как на React Router 3, так и на 4.
источник
Нет необходимости использовать
<Link />
компонент от response-router.Если вы хотите перейти по внешней ссылке, используйте тег привязки.
источник
rel="noopener noreferrer"
к<a>
Фактически я создал свой собственный компонент.
<Redirect>
Он берет информацию изreact-router
элемента, поэтому я могу сохранить ее в своих маршрутах. Такие как:Вот мой компонент на случай, если кому-то интересно:
РЕДАКТИРОВАТЬ - ПРИМЕЧАНИЕ: Это с
react-router: 3.0.5
, это не так просто в 4.xисточник
Не нужно запрашивать реагирующий маршрутизатор. Это действие может быть выполнено изначально и обеспечивается браузером.
просто используйте
window.location
источник
Это можно сделать с помощью компонента Link реактивного маршрутизатора. В опоре " to " вы можете указать 3 типа данных:
Для вашего примера (внешняя ссылка):
https://example.zendesk.com/hc/en-us/articles/123456789-Privacy-Policies
Вы можете сделать следующее:
Вы также можете передавать реквизиты, в которых вы хотели бы быть, такие как title, id, className и т. Д.
источник
Используя некоторую информацию здесь, я придумал следующий компонент, который вы можете использовать в своих объявлениях маршрута. Он совместим с React Router v4.
Он использует машинописный текст, но должен быть довольно простым для преобразования в собственный javascript:
И использовать с:
источник
Мне с этим повезло:
источник
Я не думаю, что React-Router предоставляет такую поддержку. В документации упоминается
Вместо этого вы можете попробовать использовать что-то вроде React-Redirect
источник
Чтобы расширить ответ Алана, вы можете создать,
<Route/>
который перенаправляет все<Link/>
атрибуты «to», содержащие «http:» или «https:», на правильный внешний ресурс.Ниже приведен рабочий пример этого, который можно поместить прямо в ваш
<Router>
.источник
ДЛЯ V3, хотя может работать и для V4. Исходя из ответа Эрика, мне нужно было сделать немного больше, например, обработать локальную разработку, где http отсутствует в URL-адресе. Я также перенаправляюсь в другое приложение на том же сервере.
Добавлено в файл роутера:
И компонент:
источник
Используя React с Typescript, вы получите сообщение об ошибке, поскольку функция должна возвращать элемент реакции, а не
void
. Я сделал это таким образом, используя метод рендеринга Route (и используя маршрутизатор React v4):Где вы могли бы вместо этого также использовать
window.location.assign()
иwindow.location.replace()
т. Д.источник
Если вы используете рендеринг на стороне сервера, вы можете использовать
StaticRouter
. С вашимcontext
as,props
а затем добавлением<Redirect path="/somewhere" />
компонента в ваше приложение. Идея состоит в том, что каждый раз, когда response-router соответствует компоненту перенаправления, он будет добавлять что-то в контекст, который вы передали в статический маршрутизатор, чтобы вы знали, что ваш путь соответствует компоненту перенаправления. теперь, когда вы знаете, что попали в перенаправление, вам просто нужно проверить, является ли это перенаправлением, которое вы ищете. тогда просто перенаправьте через сервер.ctx.redirect('https://example/com')
.источник
<Redirect push={ true } to="/pathtoredirect" />
Мне удалось добиться перенаправления в response-router-dom, используя следующие
В моем случае я искал способ перенаправлять пользователей всякий раз, когда они посещают корневой URL-адрес,
http://myapp.com
в другое место в приложенииhttp://myapp.com/newplace
. так что вышеперечисленное помогло.источник