![](/img/trans.png)
[英]Uncaught Error: [RouteWrapper] is not a <Route> component. All component children of <Routes> must be a <Route> or <React.Fragment>
[英]BrowserRouter is not a <Route> component. All component children of <Routes> must be a <Route> or <React.Fragment>
每當我運行我的代碼時,我的 Web 應用程序都會出現以下錯誤:
錯誤:
useHref(
) 只能在<Router>
組件的上下文中使用。
錯誤:[BrowserRouter] 不是
<Route>
組件。<Routes>
的所有子組件必須是<Route>
或<React.Fragment>
我正在使用“react”:“^18.2.0”、“react-dom”:“^18.2.0”、“react-router-dom”:“^6.3.0”。
應用程序.js
import React from "react";
import { BrowserRouter as Route, Routes } from "react-router-dom";
import "bootstrap/dist/css/bootstrap.min.css"
import Navbar from "./components/navbar.component";
import ExercisesList from "./components/exercises-list.component";
import EditExercise from "./components/edit-exercise.component";
import CreateExercise from "./components/create-exercise.component";
import CreateUser from "./components/create-user.component";
function App() {
return (
<div className="container">
<Navbar />
<Routes>
<Route path="/" exact component={ExercisesList} />
<Route path="/edit/:id" component={EditExercise} />
<Route path="/create" component={CreateExercise} />
<Route path="/user" component={CreateUser} />
</Routes>
</div>
);
}
export default App;
react-router-dom
中已經有一個內置函數Route
。 所以它告訴你不能將BrowserRouter
稱為Route
。 你只需要像下面這樣,
import React from "react";
import {BrowserRouter as Router, Routes, Route} from "react-router-dom";
import "bootstrap/dist/css/bootstrap.min.css"
import Navbar from "./components/navbar.component";
import ExercisesList from "./components/exercises-list.component";
import EditExercise from "./components/edit-exercise.component";
import CreateExercise from "./components/create-exercise.component";
import CreateUser from "./components/create-user.component";
function App() {
return (
<div className="container">
<Router>
<Navbar />
<Routes>
<Route path="/" exact component={ExercisesList} />
<Route path="/edit/:id" component={EditExercise} />
<Route path="/create" component={CreateExercise} />
<Route path="/user" component={CreateUser} />
</Routes>
<Router>
</div>
);
}
export default App;
如果您需要對react-router-dom
配置有一個非常好的想法。 閱讀https://medium.com/@sujith1396/a-basic-implementation-on-react-router-dom-v6-e9ff3b4e0529
您使用BrowserRouter
錯誤。 在BrowserRouter
組件內部,您可以放置“靜態”組件(根據 Sujith Sandeep 的回答):
<Router>
<Navbar /> // this is a static component, it is shown always
...
</Router>
然后將Routes
組件放在同一個BrowserRouter
中,其子組件會根據您的瀏覽器 URL “交換”:
<Routes> // this component renders only one of its children based on URL
<Route path="/" exact component={ExercisesList} />
<Route path="/edit/:id" component={EditExercise} />
<Route path="/create" component={CreateExercise} />
<Route path="/user" component={CreateUser} />
</Routes>
所以最終你錯過的是處理所有組件交換的BrowserRouter
組件。
您已將BrowserRouter
作為Route
導入,並且可能沒有包裝App
/UI 並提供路由上下文的路由器組件。 Route
組件 API 也發生了變化, component
、 render
和ReactNode
children
單個element
prop,即 JSX。
正確導入BrowserRouter
並將組件渲染到其中。 將Route
組件的element
prop 上的路由組件渲染為 JSX。
例子:
...
import { BrowserRouter as Routes, Routes, Route } from "react-router-dom";
...
function App() {
return (
<Router>
<div className="container">
<Navbar />
<Routes>
<Route path="/" element={<ExercisesList />} />
<Route path="/edit/:id" element={<EditExercise />} />
<Route path="/create" element={<CreateExercise />} />
<Route path="/user" element={<CreateUser />} />
</Routes>
</div>
</Router>
);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.