Há alguma maneira de evitar que /#/
apareça na barra de endereços do navegador ao usar o react-router? Isso é com ReactJS. ou seja, clicar em links para ir para uma nova rota mostralocalhost:3000/#/
ou
localhost:3000/#/about
. Dependendo da rota.
reactjs
react-router
Alce gigante
fonte
fonte
HashHistory
isoBrowserHistory
. Veja também esta questão do SO, onde dou muitas informações básicas sobre este assunto.Respostas:
Para as versões 1, 2 e 3 do react-router, a maneira correta de definir a rota para o esquema de mapeamento de URL é passando uma implementação de histórico para o
history
parâmetro de<Router>
. Da documentação de histórias :Versões 2 e 3
Nos react-router 2 e 3, o seu código de configuração de rota será semelhante a este:
Versão 1
Na versão 1.x, você usará o seguinte:
Fonte: Guia de atualização da versão 2.0
Versão 4
Para a próxima versão 4 do react-router, a sintaxe mudou muito e é necessário usá-la
BrowserRouter
como a tag raiz do roteador.Documentos do roteador Source React versão 4
fonte
history
é um pacote independente que você precisa instalar.browserHistory
in v2.x:import { browserHistory } from 'react-router' <Router history={browserHistory} />
Verifique o guia de atualização dohashHistory
, há uma maneira de se livrar desse parâmetro de consulta no final?http://localhost:8080/#/dashboard?_k=yqwtyu
Para a versão atual 0.11 e posteriores, você precisa adicionar
Router.HistoryLocation
aRouter.run()
.<Routes>
agora estão obsoletos. Consulte o Guia de atualização para a implementação de HistoryLocation 0.12.x.fonte
Se você não precisa suportar o IE8, pode usar o histórico do navegador e o react-router usará em
window.pushState
vez de definir o hash.Como exatamente fazer isso depende da versão do Roteador React que você está usando:
fonte
<Routes location="history">
tudo funciona bem, até que você atualize o navegador quando estiver em rota, ou sejalocalhost:3000/about
, recebo um erro 404. Isso é esperado, estou usandopython -m SimpleHTTPServer 3000
?/about
realmente carrega sua página raiz/
. Caso contrário, seu servidor está tentando procurar uma rota que corresponda/about
e não encontra nada (404). Eu pessoalmente não uso o python, mas geralmente você encontra uma rota manual para/*
ou/.*
->/
funciona - ou pode ser algo chamadohtml5Mode
urls nas configurações do servidor.Você pode usar .htaccess para fazer isso. O navegador normalmente precisa do delimitador de string de consulta
?
ou#
para determinar onde a string de consulta começa e os caminhos do diretório terminam. O resultado final que queremos éwww.mysite.com/dir
Portanto, precisamos detectar o problema antes que o servidor da web procure o diretório que ele pensa que pedimos/dir
. Então, colocamos um.htaccess
arquivo na raiz do projeto.Em seguida, você obtém os parâmetros de consulta com window.location.pathname
Você pode então evitar o uso de rotas de reação, se quiser, e apenas manipular o url e o histórico do navegador, se quiser. Espero que isso ajude alguém ...
fonte
Instale o pacote de histórico
Em seguida, importe createHistory e useBasename do histórico
se o URL do seu aplicativo for www.example.com/myApp, / root deve ser / myApp.
passe a variável de histórico para o roteador
Agora, para todas as suas tags de Link, acrescente um "/" na frente de todos os caminhos.
A inspiração da solução veio do React-Router Example que, infelizmente, não foi devidamente documentado em sua API.
fonte
Outra maneira de lidar com o que exibir após o hash (portanto, se você não usar pushState!), É criar seu CustomLocation e carregá-lo na criação do ReactRouter.
Por exemplo, se você deseja ter um url hashbang (portanto, com #!) Para obedecer às especificações do Google para rastreamento, você pode criar um arquivo HashbangLocation.js que copia principalmente o HashLocation original, como:
Observe a função slashToHashbang .
Então você tem que fazer
E é isso :-)
fonte