32
votes

withrouter 'n'est pas exporté de' react-router-dome

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"
}


1 commentaires

FYI: Voici la question concernant Switch n'est pas exporté: stackoverflow.com/q/63124161/630364


9 Réponses :


-12
votes
import {withRouter} from 'react-router-dom';

3 commentaires

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



5
votes

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


0 commentaires

0
votes

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.


1 commentaires

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 .



11
votes

// 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;
  }


1 commentaires

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 .



17
votes

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 () .


0 commentaires

7
votes

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;
}


0 commentaires

0
votes

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>` 


0 commentaires

2
votes

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.


0 commentaires

0
votes

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;
}


0 commentaires