【问题标题】:converting react router to v6将反应路由器转换为 v6
【发布时间】:2021-11-29 17:36:06
【问题描述】:

我在尝试将现有应用转换为使用 react-router v6 时收到一条错误消息:

错误:<Route> 只能用作 <Routes> 的子级 元素,从不直接渲染。请将您的 <Route> 包裹在 <Routes>.

这是我的App 组件(BrowserRouter 包装了应用程序,自定义Router 组件是一个子组件):

import React from 'react';
import './config';
import './App.css';

import { BrowserRouter } from 'react-router-dom';
import Router from './auth/route/router';

import Header from './components/header';
// import MobileHeader from './components/header/mobileHeader/MobileHeader';
import Footer from './components/footer';
import { AuthDataProvider } from './auth/AuthDataContext';

export default function App() {
  return (
    <div className='App'>
      <BrowserRouter>

        <AuthDataProvider>
          {/* <MobileHeader /> */}
          <Header />
          <Router />
        </AuthDataProvider>
        <Footer />
      </BrowserRouter>
    </div>
  );
}

Router 组件分别包含 RoutesRoute 作为子组件:

import React from 'react';
import { Route, Routes } from 'react-router-dom';
// import PrivateRoute from './privateRoute';

import CompanyDetailsPage from '../../components/pages/company-details';
import DashboardPage from '../../components/pages/dashboard';
import HomePage from '../../components/pages/home';
import MessagesPage from '../../components/pages/messages';
import MyClientsPage from '../../components/pages/my-clients';
import Privacy from '../../components/pages/privacy';
import ProviderClientsPage from '../../components/pages/provider-clients';
import ProfilePage from '../../components/pages/profile';
import TermsPage from '../../components/pages/terms';
import ServiceDiscoveryPage from '../../components/pages/service-discovery';

import onBoarding from '../../components/pages/onboarding/onBoarding';

function Router(props) {
  return (
    <Routes>
      <Route exact path='/' element={HomePage} />
      <Route exact path='/privacy' element={Privacy} />
      <Route exact path='/terms' element={TermsPage} />

      <Route {...props} path='/dashboard' element={DashboardPage} />
      <Route {...props} path='/profile' element={ProfilePage} />
      <Route {...props} path='/onboarding' element={onBoarding} />
      <Route
        {...props}
        path='/company-details'
        element={CompanyDetailsPage}
      />
      <Route
        {...props}
        path='/company-clients'
        element={ProviderClientsPage}
      />
      <Route {...props} path='/my-clients' element={MyClientsPage} />
      <Route
        {...props}
        path='/service-discovery'
        element={ServiceDiscoveryPage}
      />
      <Route {...props} path='/messages' element={MessagesPage} />
    </Routes>
  );
}

export default Router;

我不确定这个错误相对于我的架构意味着什么。它似乎在检查我,当然我知道某处缺少某些东西。这是我使用路由器 v6 的第一天,因此我们将不胜感激。 谢谢!

【问题讨论】:

    标签: reactjs react-router react-router-dom


    【解决方案1】:

    Routes 组件到Route 组件的整体结构是正确的,但是路由组件应该在 element 属性上呈现为 JSX,而不是对 React 组件的引用。

    function Router(props) {
      return (
        <Routes>
          <Route path='/' element={<HomePage />} />
          <Route path='/privacy' element={<Privacy />} />
          <Route path='/terms' element={<TermsPage />} />
    
          <Route {...props} path='/dashboard' element={<DashboardPage />} />
          <Route {...props} path='/profile' element={<ProfilePage />} />
          <Route {...props} path='/onboarding' element={<OnBoarding />} />
          <Route
            {...props}
            path='/company-details'
            element={<CompanyDetailsPage />}
          />
          <Route
            {...props}
            path='/company-clients'
            element={<ProviderClientsPage />}
          />
          <Route {...props} path='/my-clients' element={<MyClientsPage />} />
          <Route
            {...props}
            path='/service-discovery'
            element={<ServiceDiscoveryPage />}
          />
          <Route {...props} path='/messages' element={<MessagesPage />} />
        </Routes>
      );
    }
    

    【讨论】:

    • 所以在将组件转换为 JSX 后,我仍然收到同样的错误。
    • @BenShekhtman 您是否在代码的其他地方渲染了任何Route 组件?你确定你已经杀死并重新启动了任何开发构建观察者/热重载器吗?
    • 代码中的其他地方有更多路线。现在取得进展!谢谢!
    • @BenShekhtman 啊,是的,行了,必须将所有Route 组件渲染为Routes 组件,即使它们被子路由的组件嵌套和渲染。干杯。
    猜你喜欢
    • 2021-10-17
    • 1970-01-01
    • 2021-03-29
    • 1970-01-01
    • 2022-01-11
    • 2022-01-14
    • 2020-10-04
    • 2023-01-16
    • 1970-01-01
    相关资源
    最近更新 更多