繁体   English   中英

BrowserRouter 不是一个<Route>零件。 的所有子组件<Routes>必须是<Route>或者<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 也发生了变化, componentrenderReactNode 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.

相关问题 未捕获的错误:[RouteWrapper] 不是<Route>零件。 的所有子组件<Routes>必须是<Route>或者<React.Fragment> 未捕获的错误:[Elements] 不是<Route>零件。 的所有子组件<Routes>必须是<Route>或者<React.Fragment> 未捕获的错误:[Topbar] 不是<route>零件。 的所有子组件<routes>必须是<route>或者<react.fragment></react.fragment></route></routes></route> 未捕获的错误:[ItemListContainer] 不是<Route>零件。 的所有子组件<Routes>必须是<Route>或者<React.Fragment> ReactJS:[首页]不是<route>成分。 的所有子组件<routes>必须是<route>或者<react.fragment></react.fragment></route></routes></route> 错误:[PrivateRoute] 不是<route>成分。 的所有子组件<routes>必须是一个<route>或者<react.fragment></react.fragment></route></routes></route> 布局不是<route>成分。 的所有子组件<routes>必须是一个<route>或者<react.fragment> . 我应该如何克服这个错误?</react.fragment></route></routes></route> runtime.js:7 未捕获错误:[RequireAuth] 不是<route>成分。 的所有子组件<routes>必须是一个<route>或者<react.fragment></react.fragment></route></routes></route> 部分不是<route>成分。 的所有子组件<routes>必须是一个<route></route></routes></route> ERROR 错误:路由“ViewPayments”的组件必须是 React 组件。 例如:
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM