Mon objectif est d'activer un bouton "Retour", mais uniquement si l'itinéraire/le chemin vers lequel l'utilisateur retournerait appartient à une certaine catégorie.
Plus précisément, j'ai deux types de routes: /<someContent>
Et /graph/<graphId>
. Lorsque l'utilisateur navigue entre les graphiques, il doit pouvoir revenir au graphique précédent mais pas à une route /...
. C'est pourquoi je ne peux pas simplement exécuter history.goBack()
, je dois d'abord vérifier l'emplacement.
const history = createHashHistory();
const router = (
<ConnectedRouter history={history}>
<Switch>
<Route exact path='/' component={Home}></Route>
<Route exact path='/extension' component={Home}></Route>
<Route exact path='/settings' component={Home}></Route>
<Route exact path='/about' component={Home}></Route>
<Route exact path='/search' component={Home}></Route>
<Route exact path='/contact' component={Home}></Route>
<Route path='/graph/:entityId' component={Graph}></Route>
</Switch>
</ConnectedRouter>
);
Je voudrais implémenter quelque chose comme ça dans le composant Graph
:
if (this.props.history.previousLocation().indexOf('graph') > -1){
this.props.history.goBack();
} else {
this.disableReturnButton();
}
Cette question s'applique également à goForward()
car je voudrais désactiver le bouton "Suivant" s'il ne s'applique pas. L'utilisateur se déplace également avec this.props.history.Push(newLocation)
Évidemment, j'aimerais éviter d'utiliser des astuces comme la connexion à localStorage
ou à un redux store
lorsque l'utilisateur se déplace, cela semble moins naturel et je sais comment le faire.
Lors de la navigation via le composant Link
ou même si history.Push
, vous pouvez passer l'emplacement actuel à un autre composant Route
comme
<Link to={{pathname: '/graph/1', state: { from: this.props.location.pathname }}} />
ou
history.Push({
pathname: '/graph/1',
state: {
from: this.props.location.pathname
}
})
et vous pouvez simplement obtenir cet emplacement dans votre composant comme this.props.location.state && this.props.location.state.from
puis décidez si vous ne voulez pas goBack
ou non