Quelqu'un peut-il me dire comment je peux revenir à la page précédente plutôt qu'à un itinéraire spécifique?
Lors de l'utilisation de ce code:
var BackButton = React.createClass({
mixins: [Router.Navigation],
render: function() {
return (
<button
className="button icon-left"
onClick={this.navigateBack}>
Back
</button>
);
},
navigateBack: function(){
this.goBack();
}
});
Obtenez cette erreur, goBack () a été ignoré car il n'y a pas d'historique du routeur
Voici mes itinéraires:
// Routing Components
Route = Router.Route;
RouteHandler = Router.RouteHandler;
DefaultRoute = Router.DefaultRoute;
var routes = (
<Route name="app" path="/" handler={OurSchoolsApp}>
<DefaultRoute name="home" handler={HomePage} />
<Route name="add-school" handler={AddSchoolPage} />
<Route name="calendar" handler={CalendarPage} />
<Route name="calendar-detail" path="calendar-detail/:id" handler={CalendarDetailPage} />
<Route name="info-detail" path="info-detail/:id" handler={InfoDetailPage} />
<Route name="info" handler={InfoPage} />
<Route name="news" handler={NewsListPage} />
<Route name="news-detail" path="news-detail/:id" handler={NewsDetailPage} />
<Route name="contacts" handler={ContactPage} />
<Route name="contact-detail" handler={ContactDetailPage} />
<Route name="settings" handler={SettingsPage} />
</Route>
);
Router.run(routes, function(Handler){
var mountNode = document.getElementById('app');
React.render(<Handler /> , mountNode);
});
javascript
reactjs
react-router
Bombardier
la source
la source
Réponses:
Je pense que vous avez juste besoin d'activer BrowserHistory sur votre routeur par comme ça initialisation de :
<Router history={new BrowserHistory}>
.Avant cela, vous devriez exiger
BrowserHistory
de'react-router/lib/BrowserHistory'
J'espère que cela aide!
UPDATE: exemple dans ES6
la source
this.props.history
. Donc, le code devientthis.props.history.goBack
Mise à jour avec React v16 et ReactRouter v4.2.0 (octobre 2017):
Mise à jour avec React v15 et ReactRouter v3.0.0 (août 2016):
Créé un violon avec un exemple un peu plus complexe avec une iframe intégrée: https://jsfiddle.net/kwg1da3a/
React v14 et ReacRouter v1.0.0 (10 septembre 2015)
Tu peux le faire:
Vous devez faire attention à ce que vous ayez l'historique nécessaire pour revenir en arrière. Si vous accédez directement à la page, puis que vous revenez, cela vous ramènera dans l'historique du navigateur avant votre application.
Cette solution prendra en charge les deux scénarios. Cependant, il ne gérera pas une iframe qui peut naviguer dans la page (et ajouter à l'historique du navigateur), avec le bouton retour. Franchement, je pense que c'est un bogue dans le react-router. Problème créé ici: https://github.com/rackt/react-router/issues/1874
la source
importer
withRouter
Exportez votre composant sous:
Exemple, en cliquant sur un bouton, appelez
goBack
:Testé sur la
react-router-dom
v4.3la source
withRouter
. Peut-être que nous utilisons simplement l'API native de l'historique du navigateur. Mais est-ce que ça va?Aucun mixin de navigation requis!
la source
this.context.router.history.goBack
. (+ historique)import { withRouter } from 'react-router-dom';
fonctionne avecthis.props.history.goBack();
Méthode ES6 sans mixins utilisant react-router, fonction sans état.
la source
export 'browserHistory' was not found in 'react-router'
Utilisation des hooks React
Importer:
Dans le composant sans état:
Sur événement
la source
Utiliser
withRouter
ethistory.goBack()
C'est l'idée que je mets en œuvre ...
History.js
PageOne.js
ps désolé le code est trop gros pour tout poster ici
la source
go
fonctionhistory.go(+1)
:?history.go(1)
Cela devrait suffire.Cela fonctionne avec l'historique du navigateur et du hachage.
la source
Ceci est un composant BackButton fonctionnel (React 0.14):
Vous pouvez bien sûr faire quelque chose comme ça s'il n'y a pas d'historique:
la source
Pour react-router v2.x, cela a changé. Voici ce que je fais pour ES6:
la source
Revenir à une page spécifique :
Revenir à la page précédente :
la source
Dans react-router v4.x, vous pouvez utiliser
history.goBack
ce qui équivaut àhistory.go(-1)
.App.js
Back.js
Démo: https://codesandbox.io/s/ywmvp95wpj
N'oubliez pas qu'en utilisant
history
vos utilisateurs peuvent partir car ilshistory.goBack()
peuvent charger une page que le visiteur a visitée avant d'ouvrir votre application.Pour éviter une telle situation comme décrit ci-dessus, j'ai créé une bibliothèque simple react-router-last-location qui surveille le dernier emplacement de vos utilisateurs.
L'utilisation est très simple. Vous devez d'abord installer
react-router-dom
et àreact-router-last-location
partir denpm
.Ensuite, utilisez
LastLocationProvider
comme ci-dessous:App.js
Back.js
Démo: https://codesandbox.io/s/727nqm99jj
la source
lastLocation
dehors de React ou peut-être en disantI'd like to use it programmatically
, voulez-vous simplement pouvoir l'importer commeimport { lastLocation } from '...'
?Ce qui a fonctionné pour moi était d'importer avec Routeur en haut de mon fichier;
Ensuite, utilisez-le pour envelopper la fonction exportée au bas de mon fichier;
Ce qui m'a ensuite permis d'accéder à l'accessoire historique du routeur. Exemple de code complet ci-dessous!
la source
J'utilise ces versions
la source
La seule solution qui fonctionnait pour moi était la plus simple. Aucune importation supplémentaire nécessaire.
Tks, IamMHussain
la source
Appelez le composant suivant comme ceci:
Et voici le composant:
J'utilise:
la source
Vous pouvez également utiliser
react-router-redux
qui agoBack()
etpush()
.Voici un pack d'échantillonneur pour cela:
Dans le point d'entrée de votre application, vous avez besoin
ConnectedRouter
, et une connexion parfois délicate à connecter est l'history
objet. Le middleware Redux écoute les changements d'historique:Je vais vous montrer un moyen de brancher le
history
. Notez comment l'historique est importé dans le magasin et également exporté en tant que singleton afin qu'il puisse être utilisé dans le point d'entrée de l'application:Le bloc d'exemple ci-dessus montre comment charger les
react-router-redux
assistants middleware qui terminent le processus de configuration.Je pense que cette partie suivante est complètement extra, mais je vais l'inclure au cas où quelqu'un dans le futur en trouverait un avantage:
J'utilise
routerReducer
tout le temps car cela me permet de forcer le rechargement de composants qui ne sont normalement pas dus àshouldComponentUpdate
. L'exemple évident est lorsque vous avez une barre de navigation qui est censée se mettre à jour lorsqu'un utilisateur appuie sur unNavLink
bouton. Si vous suivez cette voie, vous apprendrez que la méthode de connexion de Redux utiliseshouldComponentUpdate
. AvecrouterReducer
, vous pouvez utilisermapStateToProps
pour mapper les modifications de routage dans la barre de navigation, ce qui déclenchera sa mise à jour lorsque l'objet d'historique changera.Comme ça:
Pardonnez-moi pendant que j'ajoute des mots-clés supplémentaires pour les personnes: si votre composant ne se met pas à jour correctement, examinez
shouldComponentUpdate
en supprimant la fonction de connexion et voyez si elle résout le problème. Si tel est le cas, tirez surrouterReducer
et le composant se mettra à jour correctement lorsque l'URL change.En terminant, après avoir fait tout cela, vous pouvez appeler
goBack()
oupush()
tout moment!Essayez-le maintenant dans un composant aléatoire:
connect()
mapStateToProps
oumapDispatchToProps
react-router-redux
this.props.dispatch(goBack())
this.props.dispatch(push('/sandwich'))
Si vous avez besoin de plus d'échantillons, consultez: https://www.npmjs.com/package/react-router-redux
la source
Utilisez simplement comme ça
la source
React Router v6
useNavigate
Hook est la méthode recommandée pour revenir maintenant:Échantillon de codesandbox
Revenir en arrière / avancer plusieurs entrées de pile d'historique: Aller à un itinéraire spécifique:useNavigate
remplaceuseHistory
pour mieux prendre en charge le prochain mode React Suspense / Concurrent.la source
Attempted import error: 'useNavigate' is not exported from 'react-router-dom'.
v6.0.0-beta.0
, les développeurs ont fait duhistory
package une dépendance homologue. Jetez un œil à la mise à jour de Codesandbox, qui fonctionne à nouveau maintenant.Ce morceau de code fera l'affaire pour vous.
la source
Selon https://reacttraining.com/react-router/web/api/history
Pour
"react-router-dom": "^5.1.2",
,la source