Détails
Comment pousser vers l'historique dans React Router v4 ?
Dans la version actuelle de React Router (v3), je peux accepter une réponse du serveur et utiliser browserHistory.push
pour aller à la page de réponse appropriée. Cependant, ceci n’est pas disponible dans la v4, et je ne suis pas sûr de la manière appropriée de gérer ceci.
Dans cet exemple, utilisant Redux, components/app-product-form.js appelle this.props.addProduct(props)
quand un utilisateur soumet le formulaire. Lorsque le serveur renvoie un succès, l'utilisateur est amené à la page du panier.
// actions/index.js
export function addProduct(props) {
return dispatch =>
axios.post(`${ROOT_URL}/cart`, props, config)
.then(response => {
dispatch({ type: types.AUTH_USER });
localStorage.setItem('token', response.data.token);
browserHistory.push('/cart'); // no longer in React Router V4
});
}
Comment faire une redirection vers la page Panier à partir de la fonction pour React Router v4 ?
316
3
React Router v4 est fondamentalement différent de la v3 (et des précédentes) et vous ne pouvez pas faire
browserHistory.push()
comme vous le faisiez auparavant.Cette discussion semble être en rapport si vous voulez plus d'informations :
Au lieu de cela, vous avez quelques options pour le faire :
Utiliser le composant de haut niveau
withRouter
.Au lieu de cela, vous devriez utiliser le composant d'ordre supérieur
withRouter
, et l'envelopper dans le composant qui va pousser vers l'historique. Par exemple :Consultez la [documentation officielle] (https://reacttraining.com/react-router/web/api/withRouter) pour plus d'informations :
Utiliser l'API
context
.L'utilisation du contexte pourrait être l'une des solutions les plus simples, mais étant une API expérimentale, elle est instable et non supportée. Ne l'utilisez que lorsque tout le reste échoue. Voici un exemple :
Jetez un coup d'œil à la [documentation officielle] (https://reactjs.org/docs/context.html) sur le contexte :
C'est comme ça que j'ai fait :
Utilisez
this.props.history.push('/cart' ;);
pour rediriger vers la page du panier qui sera enregistrée dans l'objet historique.Amusez-vous bien, Michael.
this.context.history.push
ne fonctionnera pas.J'ai réussi à faire fonctionner push comme ceci :