如何 1).放一个 div , 2).在 v6 React 中使用 React Router 在 <Routes> 内渲染没有路由的组件?

How to 1). put a div , 2). render a component without Route inside <Routes> with React Router in v6 React?

我想在 <Routes> 中放置一个 div 并且在 <Routes> 中渲染一个 <Topbar /><Sidebar /> 组件而不使用 <Route> 标签为了他们。

我的代码如下:-

const App = () => {
  return (
    <Router>
      <Routes>
        <Route path="login" element={<Login />} />
        <Topbar />
        <div className="container">
          <Sidebar />
          <Route path="/" element={<Home />} />
          <Route path="users" element={<UserList />} />
        </div>
      </Routes>
    </Router>
  );
};

我想为所有路由实施 <Topbar /><Sidebar />。 但对于登录页面的例外情况(TopbarSidebar 不应显示在登录页面上。 这就是为什么我将登录路由放在 TopbarSidebar.

顶部的原因

控制台显示错误为:

Uncaught Error: [Topbar] is not a <Route> component. All component children of <Routes> must be a <Route> or <React.Fragment>

如何实现这个功能?

像下面这样更改您的路线,

你需要检查用户是否登录,如果用户登录使用 Tobbar、Sidebar 等,否则只需 return 登录路由

  const App = () => {
  const [isLogin, setIsLogin] = useState(false)


   return (
    <Router>
    <Routes>
   { isLogin ? <Topbar />
     <div className="container">
       <Sidebar />
      <Route path="/" element={<Home />} />
      <Route path="users" element={<UserList />} />
    </div> : <Route path="login" element={<Login />} />
  
  </Routes>
  </Router>
);
};

react-router-dom v6 中,只有 RouteReact.Fragment 组件是 Routes 组件的有效子组件。

使用布局组件呈现 TopbarSidebar 组件以及 Outlet 用于要呈现这些组件的路由的嵌套路由。

示例:

import { Routes, Route, Outlet } from 'react-router-dom';

const Layout = () => (
  <>
    <Topbar />
    <div className="container">
      <Sidebar />
      <Outlet />
    </div>
  </>
);

const App = () => {
  return (
    <Router>
      <Routes>
        <Route path="/login" element={<Login />} />
        <Route element={<Layout />}>
          <Route path="/" element={<Home />} />
          <Route path="users" element={<UserList />} />
        </Route>
      </Routes>
    </Router>
  );
};