#reactjs #react-router
Вопрос:
Я относительно новичок в Реагировании и ни за что на свете не могу понять, почему это не работает!
Этот код не загружает компонент приложения внутри маршрутизатора, но он загружается при самостоятельном возврате. Пример ниже
import React from "react";
import ReactDOM from "react-dom";
import App from "../components/App";
import { Router, Route } from "react-router-dom";
document.addEventListener("DOMContentLoaded", () => {
ReactDOM.render(
<Router>
<Route path="/">
<App />
</Route>
</Router>,
document.body.appendChild(document.createElement("div"))
);
});
При этом на экране ничего не загружается. Однако, когда я удаляю маршрутизатор, я вижу загрузку компонента приложения:
import React from "react";
import ReactDOM from "react-dom";
import App from "../components/App";
import { Router, Route } from "react-router-dom";
document.addEventListener("DOMContentLoaded", () => {
ReactDOM.render(
<App />,
// <Router>
// <Route path="/">
// <App />
// </Route>
// </Router>,
document.body.appendChild(document.createElement("div"))
);
});
Наконец, это мой компонент приложения (хотя не думаю, что вам это нужно)
import React from "react";
const App = () => {
return <div>app has loaded</div>;
};
export default App;
Это построено на приложении Ruby on Rails, если это имеет значение
Комментарии:
1. какая у тебя версия
react-router-dom
?
Ответ №1:
если вы используете v5 react-router-dom
:
import React from "react";
import ReactDOM from "react-dom";
import App from "../components/App";
import { BrowserRouter as Router, Switch, Route } from "react-router-dom";
document.addEventListener("DOMContentLoaded", () => {
ReactDOM.render(
<Router>
<Switch>
<Route path="/">
<App />
</Route>
</Switch>
</Router>,
document.body.appendChild(document.createElement("div"))
);
});
если вы используете react-router-dom
v6
import React from "react";
import ReactDOM from "react-dom";
import App from "../components/App";
import { BrowserRouter as Router, Routes, Route } from "react-router-dom";
document.addEventListener("DOMContentLoaded", () => {
ReactDOM.render(
<Router>
<Routes>
<Route path="/" element={<App />} />
</Routes>
</Router>,
document.body.appendChild(document.createElement("div"))
);
});
Ответ №2:
Вместо
import { Router, Route } from "react-router-dom";
пробовать
import { BrowserRouter, Route } from "react-router-dom";
Комментарии:
1. по-прежнему ничего
import React from "react"; import ReactDOM from "react-dom"; import App from "../components/App"; import { BrowserRouter, Route, Switch } from "react-router-dom"; document.addEventListener("DOMContentLoaded", () => { ReactDOM.render( <BrowserRouter> <Route path="/"> <App /> </Route> </BrowserRouter>, document.body.appendChild(document.createElement("div")) ); });
Ответ №3:
Какие версии react и react-router-dom вы используете? Это работает для меня по-новому npx create-react-app
:
import React from "react";
import ReactDOM from "react-dom";
import App from "./App";
import { BrowserRouter, Routes, Route } from "react-router-dom"; // BrowserRouter as Router
document.addEventListener("DOMContentLoaded", () => {
ReactDOM.render(
<div>
<BrowserRouter>
<Routes>
<Route path="/" element={<App />} />
</Routes>
</BrowserRouter>
</div>,
document.body.appendChild(document.createElement("div"))
);
});
Ответ №4:
Исправлено:
import React from "react";
import ReactDOM from "react-dom";
import App from "../components/App";
import { Router, Route, Switch } from "react-router-dom";
document.addEventListener("DOMContentLoaded", () => {
ReactDOM.render(
<Router>
<Switch>
<Route exact path="/">
<App />
</Route>
</Switch>
</Router>,
document.body.appendChild(document.createElement("div"))
);
});