Contexte rapide - J'ai une application React Redux créée à l'aide de l'ARC CLI. Il y a 2 pages ou routes configurées dans mon App.js en utilisant BrowserRouter et Route de react-router-dom
. L'un est / products qui affiche tous les produits. Le deuxième est / product-details
qui montre les détails d'un produit.
Problème 1 - Quand je viens sur la page des produits, l'état redux contient toutes les informations sur les produits. Lorsque je navigue manuellement vers l'url / product-details
, l'état de redux avec toutes les informations sur le produit est perdu. Pourquoi cela se produit-il?
Problème 2 - Autre que la navigation manuelle, comment puis-je naviguer par programmation de / products vers / product-details page sans perdre l'état redux? P >
J'ai essayé d'utiliser BrowserHistory comme suggéré dans d'autres réponses SO. Mais cela ne semble pas fonctionner pour les deux problèmes ci-dessus.
<Router> <div> <Route path="/" exact component={Products} /> <Route path="/product-details" component={ProductDetails} /> </div> </Router>
Attendu
3 Réponses :
1) Où avez-vous obtenu les données du serveur? peut-être la page des produits? Si tel est le cas, vous ne pouvez pas conserver les données lorsque vous accédez manuellement à la page de détails. Dans votre cas, dans la page de détail, vous devez envoyer une demande au serveur avec l'ID produit pour obtenir informations détaillées sur le produit. Ensuite, cela fonctionnera à coup sûr.
2) La page Route for details devrait ressembler à ceci.
Et vous pouvez aller à la page de détail comme celle-ci.
this.props.history.push ('/ product-details / 1');
Cela fonctionnera à coup sûr.
Il semble que la façon dont vous naviguez entraîne la récupération de la nouvelle page sur le serveur. Par exemple, si vous modifiez manuellement l'URL dans la barre d'adresse ou définissez l'URL avec l'API de localisation du navigateur, cela déclenchera un chargement de page. La façon de naviguer sans déclencher un nouveau chargement de page consiste à utiliser API d'historique de react-routeur depuis votre composant comme ceci:
this.props.history.push('/product-details');
Vous devez utiliser
pour naviguer entre les pages lorsque vous utilisez le routeur. Sinon, la page sera actualisée et votre boutique redux sera réinitialisée. Si vous entrez l'URL directement dans le navigateur et accédez à la page product-detail
, cela ne fonctionnera pas.
<Link to="/product-details" />
1) Lorsque je navigue manuellement vers les détails du produit à partir de la barre d'adresse, L'état de la page / products doit être disponible
Dans ce cas, vous devez à nouveau récupérer les détails du produit. Mais vous avez besoin d'un identifiant de produit pour cela. Vous pouvez utiliser l'itinéraire / product-details /: id
pour cela. Obtenez l ' id
dans votre composant de détails du produit et en utilisant Fetch obtenir les détails du produit
2) Doit être capable de naviguer par programmation vers le / product-details page et l'état disponible.
Pour un clic de souris, utilisez
. Pour utiliser par programme
p >