Un moyen d'empêcher /#/
de s'afficher dans la barre d'adresse du navigateur lors de l'utilisation de react-router? C'est avec ReactJS. c'est-à-dire en cliquant sur les liens pour aller à un nouvel itinéraire montre localhost:3000/#/
ou
localhost:3000/#/about
. Selon l'itinéraire.
reactjs
react-router
Élan géant
la source
la source
HashHistory
isoBrowserHistory
. Voir aussi cette question SO où je donne beaucoup d'informations générales sur ce sujet.Réponses:
Pour les versions 1, 2 et 3 de react-router, la manière correcte de définir l'itinéraire vers le schéma de mappage d'URL est de passer une implémentation d'historique dans le
history
paramètre de<Router>
. À partir de la documentation des histoires :Versions 2 et 3
Dans react-router 2 et 3, le code de configuration de votre route ressemblera à ceci:
Version 1
Dans la version 1.x, vous utiliserez à la place ce qui suit:
Source: Guide de mise à niveau de la version 2.0
Version 4
Pour la prochaine version 4 de react-router, la syntaxe a beaucoup changé et il est nécessaire de l'utiliser
BrowserRouter
comme balise racine du routeur.Documentation sur le routeur source React version 4
la source
history
s'agit d'un package autonome que vous devrez installer.browserHistory
v2.x:import { browserHistory } from 'react-router' <Router history={browserHistory} />
Vérifiez le guide de mise à niveau dehashHistory
, y a-t-il un moyen de se débarrasser de ce paramètre de requête à la fin?http://localhost:8080/#/dashboard?_k=yqwtyu
Pour la version actuelle 0.11 et les versions ultérieures, vous devez ajouter
Router.HistoryLocation
àRouter.run()
.<Routes>
sont désormais obsolètes. Consultez le Guide de mise à niveau pour l'implémentation de HistoryLocation 0.12.x.la source
Si vous n'avez pas besoin de prendre en charge IE8, vous pouvez utiliser l'historique du navigateur et react-router l'utilisera
window.pushState
au lieu de définir le hachage.La procédure exacte dépend de la version de React Router que vous utilisez:
la source
<Routes location="history">
que tout fonctionne bien, jusqu'à ce que vous actualisiez le navigateur en route, c'est-à-direlocalhost:3000/about
que j'obtiens une erreur 404. Est-ce prévu, j'utilisepython -m SimpleHTTPServer 3000
?/about
charge donc votre page racine/
. Sinon, votre serveur essaie de rechercher une route qui correspond/about
et ne trouve rien (404). Je n'utilise pas personnellement python mais vous trouvez généralement soit une route manuelle pour/*
ou/.*
->/
fonctionne - soit quelque chose appeléhtml5Mode
urls dans les paramètres de votre serveur.Vous pouvez en fait utiliser .htaccess pour ce faire. Le navigateur a normalement besoin du délimiteur de chaîne de requête
?
ou#
pour déterminer où commence la chaîne de requête et où les chemins de répertoire se terminent. Le résultat final que nous voulons estwww.mysite.com/dir
donc nous devons attraper le problème avant que le serveur Web recherche le répertoire qu'il pense avoir demandé/dir
. Nous plaçons donc un.htaccess
fichier à la racine du projet.Ensuite, vous obtenez les paramètres de requête avec window.location.pathname
Vous pouvez alors éviter d'utiliser les routes de réaction si vous le souhaitez et simplement manipuler l'url et l'historique du navigateur si vous le souhaitez également. J'espère que cela aide quelqu'un ...
la source
Installez le package d'historique
Importez ensuite createHistory et useBasename depuis l'historique
si l'URL de votre application est www.example.com/myApp, alors / root doit être / myApp.
transmettre la variable historique au routeur
Maintenant, pour toutes vos balises Link, ajoutez un "/" devant tous les chemins.
L'inspiration de la solution est venue de l' exemple de React-Router qui, malheureusement, n'a pas été correctement documenté dans leur API.
la source
Une autre façon de gérer ce qu'il faut afficher après le hachage (donc si vous n'utilisez pas pushState!) Est de créer votre CustomLocation et de le charger lors de la création de ReactRouter.
Par exemple, si vous souhaitez avoir une URL de hachage (donc avec #!) Pour vous conformer aux spécifications google pour l'exploration, vous pouvez créer un fichier HashbangLocation.js qui copie principalement le HashLocation d'origine tel que:
Notez la fonction slashToHashbang .
Alors tu dois juste faire
Et c'est tout :-)
la source