Après NPM I - Save React-Router-Dom et NPM Install - Savec With-Router J'ai essayé d'écrire
{ "name": "react-material-dashboard", "author": "Apanay22", "licence": "MIT", "version": "1.0.0", "private": false, "scripts": { "start": "react-scripts start http-server ", "build": "react-scripts build", "test": "react-scripts test", "eject": "react-scripts eject" }, "eslintConfig": { "extends": "react-app" }, "browserslist": { "production": [ ">0.2%", "not dead", "not op_mini all" ], "development": [ "last 1 chrome version", "last 1 firefox version", "last 1 safari version" ] }, "dependencies": { "@material-ui/core": "^4.11.0", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "^4.0.0-alpha.56", "@material-ui/styles": "^4.10.0", "axios": "^0.21.1", "bcrypt": "^5.0.0", "chart.js": "^2.9.3", "clsx": "^1.1.1", "compress.js": "^1.1.2", "cors": "^2.8.5", "csv-parse": "^4.15.1", "express": "^4.17.1", "formik": "^2.1.5", "glob": "^7.1.6", "gulp": "^4.0.2", "history": "^5.0.0", "lodash": "^4.17.19", "material-ui-popup-state": "^1.7.1", "moment": "^2.27.0", "mui-datatables": "^3.7.6", "nprogress": "^0.2.0", "papaparse": "^5.3.0", "prop-types": "^15.7.2", "react": "^16.13.1", "react-chartjs-2": "^2.10.0", "react-csv-reader": "^3.2.1", "react-dom": "^16.13.1", "react-feather": "^2.0.8", "react-helmet": "^6.1.0", "react-hot-toast": "^1.0.2", "react-image-file-resizer": "^0.4.2", "react-navigation": "^4.4.4", "react-perfect-scrollbar": "^1.5.8", "react-redux": "^7.2.2", "react-router": "^6.0.0-beta.0", "react-router-dom": "^6.0.0-beta.0", "react-scripts": "^3.4.1", "react-toast-notifications": "^2.4.0", "react-toastify": "^7.0.2", "redux": "^4.0.5", "redux-thunk": "^2.3.0", "use-history": "^1.4.1", "uuid": "^8.3.0", "with-router": "^1.0.1", "yup": "^0.29.3" }, "devDependencies": { "@types/react-router-dom": "^5.1.7", "concurrently": "^5.3.0", "eslint": "^6.8.0", "eslint-config-airbnb": "^18.2.0", "eslint-config-prettier": "^6.11.0", "eslint-plugin-import": "^2.22.0", "eslint-plugin-jsx-a11y": "^6.3.1", "eslint-plugin-prettier": "^3.1.4", "eslint-plugin-react": "^7.20.3", "eslint-plugin-react-hooks": "^2.5.1", "prettier": "^1.19.1" }, "proxy": "http://localhost:9000" }
9 Réponses :
import {withRouter} from 'react-router-dom';
Bienvenue à Stack Overflow! Bien que ce code puisse résoudre la question, y compris une explication de comment et pourquoi cela résout le problème aiderait vraiment à améliorer la qualité de votre Publier, et aboutit probablement à plus de votes. N'oubliez pas que vous répondez à la question des lecteurs à l'avenir, pas seulement à la personne qui demande maintenant. S'il vous plaît modifier Votre réponse pour ajouter des explications et donner une indication de quelles limitations et hypothèses s'appliquent.
Surtout, veuillez expliquer la différence à la réponse de Dakota. Je n'en vois pas et j'ai l'impression que vous proposez la même chose. Cela me fait me demander si vous êtes conscient de cette réponse plus ancienne.
Ahah, "Bienvenue à notre amical SO": -6 points dès le début: D
J'ai vu que vous utilisez React-Router-Dom 6 et c'est très différent de la version 5. Vous avez 2 options, rétrogradent à la version 5 ou essayez d'implémenter la nouvelle version ici est la nouvelle documentation Documentation
Essayez d'installer l'ancienne version, par exemple la version 5. Cela ne fonctionnera pas sur la dernière version 6. et je peux voir que c'est ce que vous utilisez.
Votre réponse pourrait être améliorée avec des informations de support supplémentaires. Veuillez modifier pour ajouter plus de détails, tels que des citations ou de la documentation, afin que d'autres puissent confirmer que votre réponse est correcte. Vous pouvez trouver plus d'informations sur la façon d'écrire de bonnes réponses dans le centre d'aide .
// Vous pouvez importer ceci et cette fonction
import { useLocation, useNavigate, useParams } from "react-router-dom"; function withRouter(Component) { function ComponentWithRouterProp(props) { let location = useLocation(); let navigate = useNavigate(); let params = useParams(); return ( <Component {...props} router={{ location, navigate, params }} /> ); } return ComponentWithRouterProp; }
Votre réponse pourrait être améliorée avec des informations de support supplémentaires. Veuillez modifier pour ajouter plus de détails, tels que des citations ou de la documentation, afin que d'autres puissent confirmer que votre réponse est correcte. Vous pouvez trouver plus d'informations sur la façon d'écrire de bonnes réponses dans le centre d'aide .
J'ai eu le même problème. Je l'ai corrigé en rétrogradant react-router
et react-router-dom
à la version 5.2.0
.
Il suffit d'exécuter NPM Installer React-Router-Dom@5.2.0
et NPM Install React-Router@5.2.0
. Cela devrait résoudre le problème avec withrouter ()
.
Depuis la page FAQ, vous devez avoir réagi 16.8+ pour pouvoir utiliser des crochets. Je suis sur 17.0.2, semble fonctionner bien:
https://reactrouter.com / docs / en / v6 / faq
import { useLocation, useNavigate, useParams } from "react-router-dom"; function withRouter(Component) { function ComponentWithRouterProp(props) { let location = useLocation(); let navigate = useNavigate(); let params = useParams(); return ( <Component {...props} router={{ location, navigate, params }} /> ); } return ComponentWithRouterProp; }
Dans mon cas, réagir l'application Arrêtez la rediffusion lorsque l'itinéraire change après la migration vers réagir v.18 ;
pour l'instant j'ai laissé react-router-dom Code> sur v.5 mais pour résoudre le problème déplacé réagir le mode strict à l'intérieur de l'itinéraire:
<HashRouter> <React.StrictMode> <App /> </React.StrictMode> </HashRouter>`
Pour ceux qui préfèrent les composants de la classe pour les composants de fonction, la solution équivalente pour React-Route-Dom V6 est:
import { useLocation } from "react-router-dom"; const withLocation = Component => props => { const location = useLocation(); return <Component {...props} location={location} />; }; export default withLocation( MyComponent)
La même s'applique à usenavigation
et useParams
.
Je n'ai pas trouvé des emballages prêts dans la bibliothèque à l'époque.
Eh bien, puisque Withrouter est supprimé de React-Router V6, vous pouvez créer votre propre fonction.
import { useNavigate } from 'react-router'; export const withRouter = (Component) =>{ const Wrapper = (props) =>{ const history = useNavigate(); return <Component history={history} {...props}/> } return Wrapper; }
FYI: Voici la question concernant
Switch
n'est pas exporté: stackoverflow.com/q/63124161/630364 a>