J'utilise le routeur de réaction. Je souhaite détecter la page précédente (au sein de la même application) d'où je viens. J'ai le routeur dans mon contexte. Mais, je ne vois aucune propriété comme "chemin précédent" ou historique sur l'objet routeur. Comment fait-on ça?
Vous pouvez enregistrer le chemin précédent dans une méthode componentWillReceiveProps
. La logique est très proche de l'exemple fourni dans section de dépannage sur react-router
docs.
<Route component={App}>
{/* ... other routes */}
</Route>
const App = React.createClass({
getInitialState() {
return { prevPath: '' }
},
componentWillReceiveProps(nextProps) {
if (nextProps.location !== this.props.location) {
this.setState({ prevPath: this.props.location })
}
}
})
Et dernièrement, accédez-y à partir de l'état.
Vous pouvez transmettre l'état à l'aide de la touche <Link>
_ composant, dans ce cas un chemin:
<Link to={{pathname: '/nextpath', state: { prevPath: location.pathname }}}>Example Link</Link>
Vous pouvez alors accéder à prevPath
à partir de this.props.location.state
dans le composant suivant
Si vous utilisez react-router-redux
vous pouvez créer un réducteur qui se connecte aux événements envoyés par react-router-redux.
export default function routerLocations(state = [], action) {
switch (action.type) {
case "@@router/LOCATION_CHANGE":
return [...state, action.payload]
default:
return state;
}
}
Si vous utilisez le <Redirect />
composant, vous pouvez ajouter une propriété from
à ajouter à location.state
dans le composant que vous redirigez.
// in the redirecting component
<Redirect
to={{
pathname: '/login',
state: { from: location }
}}
/>
//in the other component you redirected to
...
const { location } = props.location.state;
...