Я имею дело с проблемой в двух новых проектах, которые я только что начал, и я настроил их так, как на другом в производстве, и по какой-то причине я не могу найти здесь ошибку.
Я начал свой проект реагирования с последней версии create-react-app
, используя: npx create-react-app myapp
, и по какой-то причине мое приложение не компилируется локально с react-router-dom
.
Вот мои зависимости в моем package.json
:
"dependencies": {
"react": "^16.8.6",
"react-bootstrap": "^0.32.4",
"react-dom": "^16.8.6",
"react-router-dom": "^4.3.1",
"react-scripts": "3.0.1"
У меня есть файл index.js
, в котором я помещаю свой компонент <App />
внутрь компонента <Router />
, который я импортирую с помощью BrowserRouter
, как указано в react-router-dom
.
Вот содержимое моего index.js
файла:
import React from 'react';
import ReactDOM from 'react-dom';
import './index.css';
import App from './App';
import * as serviceWorker from './serviceWorker';
import { BrowserRouter as Router } from 'react-router-dom';
ReactDOM.render(
<Router>
<App />
</Router>,
document.getElementById('root')
);
// If you want your app to work offline and load faster, you can change
// unregister() to register() below. Note this comes with some pitfalls.
// Learn more about service workers:
serviceWorker.unregister();
Оттуда мой компонент <App />
реализует пользовательский компонент <Routes />
, который использует Route
и Switch
из react-router-dom
для удовлетворения потребностей маршрутизации моего приложения.
Вот содержимое моего компонента <App />
:
import React, { Component } from "react";
import { Link } from "react-router-dom";
import { Navbar } from "react-bootstrap";
import Routes from "./Routes.js";
import "./App.css";
class App extends Component {
render() {
return (
<div className = "App container">
<Navbar fluid collapsOnSelect>
...... misc navbar code
</Navbar>
<Routes />
</div>
);
}
}
export default App;
Вот как выглядит мой файл Routes.js
и как он использует Route
и Switch
из react-router-dom
:
import React from "react";
import { Route, Switch } from "react-router-dom";
import Home from "./containers/Home";
export default () => <Switch>
<Route path = "/" exact component = { Home } />
</Switch>;
Вот компонент { Home }
, который я пытаюсь обслуживать локально:
import React, { Component } from "react";
import "./Home.css";
export default class Home extends Component {
render() {
return (
<div className = "Home">
<div className = "LandingPage">
... random html code
</div>
</div>
);
}
}
И, наконец, вот ошибка:
Как вы думаете, в чем здесь может быть проблема??? Спасибо !
ОБНОВЛЕНИЕ: добавление иерархии файлов
может так и должно быть import Home from "containers/Home";
(убрать './')
@CalvinGodfrey Я обновил его, добавив для вас изображение файловой структуры проекта, и спасибо, что заглянули!
@Ted Я попробовал это, но это не так. Это не сработало. Каталог контейнеров находится в другой папке в проекте... Для получения дополнительной информации см. обновление. Спасибо!
Переместите папку containers
в папку src
Да, теперь, когда вы добавили структуру, стало ясно, в чем проблема.
@ted извини за это! Я полностью пропустил это. Спасибо!
Ах! Так было и с файловой иерархией. Routes.js
находится в src
, поэтому он ищет в src/components
, которого не существует.
Вместо этого сделайте import Home from "../containers/Home";
или реструктурируйте проект так, чтобы containers
было внутри src
.
Я знал, что это что-то нелепое. Позвольте мне попробовать это сейчас, чтобы убедиться, и я отмечу это как ответ. Спасибо за добавление еще одного взгляда на это. Я бы хотел, чтобы это была более серьезная проблема!!! смш
Ваш route.js должен быть
import Home from "../containers/Home";
Вам нужно подняться на один каталог, чтобы добраться до контейнеров, так как вы настроили, ищет контейнеры внутри там src
Я пошел дальше и просто переместил каталог в /src, спасибо!
Не могли бы вы рассказать нам свою файловую иерархию? Где ваши разные файлы находятся по отношению друг к другу.