Есть ли способ предотвратить /#/
отображение в адресной строке браузера при использовании response-router? Это с ReactJS. т.е. щелчок по ссылкам для перехода к новому маршруту показывает localhost:3000/#/
или
localhost:3000/#/about
. В зависимости от маршрута.
reactjs
react-router
Гигантский лось
источник
источник
HashHistory
isoBrowserHistory
. См. Также этот вопрос SO, где я даю много справочной информации по этому вопросу.Ответы:
Для версий 1, 2 и 3 response-router правильный способ установить маршрут в схему сопоставления URL-адресов - передать реализацию истории в
history
параметр<Router>
. Из документации по истории :Версии 2 и 3
В response-router 2 и 3 код конфигурации вашего маршрута будет выглядеть примерно так:
Версия 1
В версии 1.x вместо этого вы будете использовать следующее:
Источник: Руководство по обновлению до версии 2.0.
Версия 4
Для грядущей версии 4 response-router синтаксис сильно изменился, и требуется использовать его
BrowserRouter
в качестве корневого тега маршрутизатора.Исходный код React Router Version 4 Docs
источник
history
это отдельный пакет, который вам необходимо установить.browserHistory
в v2.x:import { browserHistory } from 'react-router' <Router history={browserHistory} />
проверьте руководство по обновлениюhashHistory
есть ли способ избавиться от этого параметра запроса в конце?http://localhost:8080/#/dashboard?_k=yqwtyu
Для текущей версии 0.11 и более поздних вам необходимо добавить
Router.HistoryLocation
вRouter.run()
.<Routes>
устарели. См. Руководство по обновлению для реализации 0.12.x HistoryLocation.источник
Если вам не нужна поддержка IE8, вы можете использовать историю браузера, и response-router будет использовать
window.pushState
вместо установки хеша.Как именно это сделать, зависит от версии React Router, которую вы используете:
источник
<Routes location="history">
что все работает нормально, пока вы не обновите браузер, когда находитесь в пути, т.е.localhost:3000/about
тогда я получаю ошибку 404. Это ожидается, я используюpython -m SimpleHTTPServer 3000
?/about
действительно загружает вашу корневую страницу/
. В противном случае ваш сервер пытается найти подходящий маршрут/about
и ничего не находит (404). Я лично не использую python, но вы обычно находите либо ручной маршрут,/*
либо/.*
->/
работает - либо это может быть что-то, называемоеhtml5Mode
URL-адресами в настройках вашего сервера.На самом деле вы можете использовать .htaccess для этого. Браузеру обычно нужен разделитель строки запроса
?
или#
чтобы определить, где начинается строка запроса и заканчиваются пути к каталогам. Конечный результат, который мы хотим,www.mysite.com/dir
таков: нам нужно выявить проблему до того, как веб-сервер начнет поиск каталога, который, по его мнению, мы запрашивали/dir
. Итак, мы помещаем.htaccess
файл в корень проекта.Затем вы получаете параметры запроса с помощью window.location.pathname
Затем вы можете избежать использования маршрутов реакции, если хотите, и просто манипулировать URL-адресом и историей браузера, если хотите. Надеюсь, это кому-то поможет ...
источник
Установите пакет истории
Затем импортируйте createHistory и useBasename из истории
Если URL вашего приложения - www.example.com/myApp, то / root должен быть / myApp.
передать историческую переменную маршрутизатору
Теперь для всех ваших тегов ссылок добавьте «/» перед всеми путями.
Вдохновением для этого решения послужил пример React-Router, который, к сожалению, не был должным образом задокументирован в их API.
источник
Другой способ обработать то, что будет отображаться после хэша (так что, если вы не используете pushState!), - это создать свой CustomLocation и загрузить его при создании ReactRouter.
Например, если вы хотите иметь URL-адрес hashbang (например, с #!), Чтобы соответствовать спецификациям Google для сканирования, вы можете создать файл HashbangLocation.js, который в основном копирует исходный HashLocation, например:
Обратите внимание на функцию slashToHashbang .
Тогда вы должны сделать
И это все :-)
источник