Как исправить ошибку: Ошибка при попытке импорта: «Маршрут» не экспортируется из «React-router-dom»

-- Обновление: это начало работать, когда я просто остановил сервер разработки, вышел из VSCode и снова перезапустил его. Не уверен, что вызвало это.

Занят изучением React и столкнулся с этой ошибкой. Я пробовал несколько других сообщений SO, но не могу найти ответ на свою проблему.

Я следую указаниям использовать только react-router-dom и импортировать BrowserRouter и Route из react-router-dom. Но я получаю сообщение об ошибке:

./src/App.js
Attempted import error: 'Route' is not exported from 'react-router-dom'.

Не уверен, что я делаю неправильно здесь?

Вот мой App.js

import React, { Component } from 'react';
import Navbar from './components/Navbar'
import { BrowserRouter, Route } from 'react-router-dom'
import Home from './components/Home'

class App extends Component {
  render() {
    return (
      <BrowserRouter>
      <div className = "App">
        <Navbar />
        <Route path='/' component = {Home} />
      </div>
      </BrowserRouter>
    );
  }
}

export default App;

Вот мой package.json:

  "name": "poketimes",
  "version": "0.1.0",
  "private": true,
  "dependencies": {
    "react": "^16.8.5",
    "react-dom": "^16.8.5",
    "react-router-dom": "^5.0.0",
    "react-scripts": "2.1.8"
  },
  "scripts": {
    "start": "react-scripts start",
    "build": "react-scripts build",
    "test": "react-scripts test",
    "eject": "react-scripts eject"
  },
  "eslintConfig": {
    "extends": "react-app"
  },
  "browserslist": [
    ">0.2%",
    "not dead",
    "not ie <= 11",
    "not op_mini all"
  ]
}

Из того, что я читал, другие сообщения по-прежнему используют реагирующий маршрутизатор отдельно, но, если я правильно понимаю документацию, я не должен делать этого в этой версии? Кроме того, я следую учебнику, который делает это именно так, и, похоже, он работает.

Любой совет будет принят с благодарностью, спасибо!

пожалуйста, используйте это; импортировать {BrowserRouter, Route, Link} из "react-router-dom";

nuriselcuk 25.03.2019 06:59

Может возникнуть проблема с зависимостями реактивного маршрутизатора 5. reacttraining.com/blog/react-router-v5 А пока понизьте реактивный маршрутизатор до версии 4 и проверьте.

Dehan 25.03.2019 07:03

Код работает с react-router-dom v5. codeandbox.io/s/n5r3vz9980. Можете ли вы опубликовать воспроизводимый пример

Shubham Khatri 25.03.2019 07:05

Посмотрите на эту проблему, возможно, несоответствие между react-router и react-router-dom github.com/ReactTraining/реагировать-маршрутизатор/issues/6639

Tyro Hunter 25.03.2019 07:06

@TyroHunter, у другого нет реагирующего маршрутизатора в зависимостях

Shubham Khatri 25.03.2019 07:12

Всем привет. Он только начал работать, когда я остановил сервер разработки, закрыл VSCode, снова открыл его и снова запустил. Ничего не менял в коде. Я использую запуск пряжи вместо запуска npm, если это что-то значит? Спасибо.

Iwan Pieterse 25.03.2019 09:23
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
21
6
76 660
18
Перейти к ответу Данный вопрос помечен как решенный

Ответы 18

import React, { Component } from 'react';
import Navbar from './components/Navbar'
import { BrowserRouter, Route ,Switch} from 'react-router-dom'
import Home from './components/Home'

class App extends Component {
render() {
  return (
    <BrowserRouter>
     <div className = "App">
     <Navbar />
      <Switch>
      <Route exact path='/' component = {Home} />
    </Switch>

    </div>
    </BrowserRouter>
   );
  }
  }

  export default App;

попробуй так

Пожалуйста, предоставьте подробное описание, почему автору запроса необходимо импортировать Switch, также сначала оставьте комментарий, а не ответ.

nuriselcuk 25.03.2019 07:01

обратитесь к этой ссылке, чтобы понять, зачем обертывать маршрут с помощью коммутатора reacttraining.com/react-router/web/api/Switch

Kishan Jaiswal 25.03.2019 07:42

Кажется, ваш маршрут устарел в следующих версиях, поэтому используйте этот импорт:

import {Route} from 'react-router-dom/Route';

Во всяком случае, вы бы импортировали Route, а не {Route}. Импорт {route} по сути является импортом react-router-dom/Route/Route

Kobe 31.07.2019 12:24

У меня была такая же проблема. У вас может быть конфликт с NPM и YARN. Я удалил свой yarn.lock и снова запустил его только с package.lock; и это сработало.

Вы должны использовать только Yarn или NPM.

Ответ принят как подходящий

Закройте сервер и перезапустите его. Это работает нормально.

npm start или yarn start

Я тоже застрял на этом... Для меня это сработало, когда версии «реагировать-маршрутизатор» и «реагировать-маршрутизатор-дом» совпадали.

"react-router": "^5.2.0",
"react-router-dom": "^5.2.0",

Возможно, это происходит из-за того, что вы его не установили. Вы должны запустить эту команду:

npm i react-router

Пожалуйста, еще раз проверьте написание BrowserRouter или, если написание правильное, перезапустите npm, используя CTRL + C и

npm start 

Вы должны добавить эту строку в свои компоненты.

import { BrowserRouter as Router, Switch, Route, Link } from "react-router-dom";

Моя проблема решилась этим методом.

проблема решена во мне

npm uninstall react-router

а также

npm uninstall react-router-dom

тогда

npm install react-router react-router-dom

используйте версию 5.0.0

Вам нужно убедиться, что тип возвращаемого значения в классе приложения. Вы возвращаете BrowserRouter. Поэтому, когда вы выполняете импорт, вам нужно убедиться, что вы указали правильное имя класса, который вы импортируете.

BrowserRouter возвращается, а не Router.

Так и должно быть

import { BrowserRouter } from 'react-router-dom'

или

import { BrowserRouter as Router } from 'react-router-dom'

Установите react-router и react-router-dom следующим образом:

npm install react-router@next react-router-dom@next

Ошибка возникает из-за того, что вы используете react-router v5 вместо v6-

Следуй этим шагам-

Шаг 1:

npm uninstall react-router

npm uninstall react-router-dom

Шаг 2:

npm install react-router@next react-router-dom@next

Шаг 3: Перезагрузите сервер

И все готово!

Эта проблема возникает из-за версии react-router-dom. Попробуйте обновить react-router-dom до версии 6.

Просто запустите команду:

npm install [email protected]

Я думаю, что это может быть связано с установкой устаревшей версии. Я смог запустить npm install history react-router-dom@next, и это решило мою проблему.

Switch устарел в более новых версиях, используйте Routes, он будет действовать так же.

Для react-router-dom v6 и выше используйте это в своем App.js

import React from 'react'
import { BrowserRouter as Router, Route, Routes } from 'react-router-dom'

import '../styles/global.css'

import Layout from '../containers/Layout'
import Home from '../pages/Home'
import Login from '../containers/Login'
import RecoveryPassword from '../containers/RecoveryPassword'
import NotFound from '../pages/NotFound'

const App = () => {
  return (
    <Router>
      <Layout>
        <Routes>
          <Route exact path = "/" element = {<Home/>}/>
          <Route exact path = "/login" element = {<Login/>}/>
          <Route exact path = "/recovery-password" element = {<RecoveryPassword/>}/>
          <Route path = "*" element = {<NotFound/>}/>
        </Routes>
      </Layout>
    </Router>
  );
}

export default App;

Изменения, сделанные с v5 на v6

Switch изменено на Routes

<Route path = '/' component = {Home}></Route>

изменился на

<Route path = '/' element= {<Home />}></Route>

Вы должны удалить папку: "node_modules" и написать это:

npm i react react-dom react-router-dom

Меня устраивает.

Добро пожаловать в Stack Overflow. Пожалуйста, прочтите Как ответить, а затем отредактируйте этот ответ, чтобы объяснить, что вы делаете и почему.

Chris 20.01.2022 00:00

работал, установив:

npm install react-router-dom@5

в папке проекта

Другие вопросы по теме