Como estou usando o react-router para lidar com minhas rotas em um app react, estou curioso para saber se há uma maneira de redirecionar para um recurso externo.
Digamos que alguém acerte:
example.com/privacy-policy
Eu gostaria que redirecionasse para:
example.zendesk.com/hc/en-us/articles/123456789-Privacy-Policies
Não estou encontrando nenhuma ajuda para evitar escrevê-lo em JS simples em meu carregamento de index.html com algo como:
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
Eric Hodonsky
fonte
fonte
window.location.href
para ter um redirecionamento formal.Respostas:
Aqui está uma linha para usar o React Router para redirecionar para um link externo:
Ele usa o conceito de componente puro React para reduzir o código do componente a uma única função que, em vez de renderizar qualquer coisa, redireciona o navegador para uma URL externa.
Funciona nos roteadores React 3 e 4.
fonte
Não há necessidade de usar o
<Link />
componente do roteador react.Se você quiser ir para um link externo, use uma tag âncora.
fonte
rel="noopener noreferrer"
ao<a>
Na verdade, acabei construindo meu próprio componente.
<Redirect>
Ele obtém informações doreact-router
elemento para que eu possa mantê-lo em minhas rotas. Tal como:Aqui está meu componente no caso - qualquer um está curioso:
EDITAR - NOTA: Isto é com
react-router: 3.0.5
, não é tão simples no 4.xfonte
Não é necessário solicitar o roteador de reação. Esta ação pode ser feita nativamente e é fornecida pelo navegador.
Apenas use
window.location
fonte
Com o componente Link do react-router, você pode fazer isso. Na proposta " para ", você pode especificar 3 tipos de dados:
Para o seu exemplo (link externo):
https://example.zendesk.com/hc/en-us/articles/123456789-Privacy-Policies
Você pode fazer o seguinte:
Você também pode passar adereços que gostaria que fossem, como título, id, className, etc.
fonte
Usando algumas das informações aqui, eu vim com o seguinte componente que você pode usar em suas declarações de rota. É compatível com React Router v4.
Ele está usando o texto digitado, mas deve ser bastante simples para converter para javascript nativo:
E use com:
fonte
Tive sorte com isso:
fonte
Não acho que o React-Router forneça esse suporte. A documentação menciona
Você pode tentar usar algo como Reagir-Redirect vez
fonte
Para expandir a resposta de Alan, você pode criar um
<Route/>
que redirecione todos<Link/>
os atributos com "para" contendo 'http:' ou 'https:' para o recurso externo correto.Abaixo está um exemplo prático disso, que pode ser colocado diretamente em seu
<Router>
.fonte
PARA V3, embora possa funcionar para V4. Saindo da resposta de Eric, eu precisava fazer um pouco mais, como lidar com o desenvolvimento local onde 'http' não está presente na url. Também estou redirecionando para outro aplicativo no mesmo servidor.
Adicionado ao arquivo do roteador:
E o componente:
fonte
Usando React com Typescript, você obtém um erro porque a função deve retornar um elemento react, não
void
. Então, fiz dessa maneira usando o método de renderização de rota (e usando o roteador React v4):Onde você também pode usar
window.location.assign()
,window.location.replace()
etc.fonte
Se você estiver usando a conversão do lado do servidor, você pode usar
StaticRouter
. Com ocontext
ASprops
e, em seguida, adicionando o<Redirect path="/somewhere" />
componente ao seu aplicativo. A ideia é que toda vez que react-router corresponder a um componente de redirecionamento, ele adicionará algo ao contexto que você passou para o roteador estático para que saiba que seu caminho corresponde a um componente de redirecionamento. agora que você sabe que atingiu um redirecionamento, só precisa verificar se esse é o redirecionamento que você está procurando. em seguida, basta redirecionar através do servidor.ctx.redirect('https://example/com')
.fonte
<Redirect push={ true } to="/pathtoredirect" />
Consegui um redirecionamento no react-router-dom usando o seguinte
No meu caso, eu estava procurando uma maneira de redirecionar os usuários sempre que eles visitarem o URL raiz
http://myapp.com
para algum outro lugar dentro do aplicativohttp://myapp.com/newplace
. então o acima ajudou.fonte