【问题标题】:Routing is not working using react-router-dom-v6.4.2 [duplicate]路由无法使用 react-router-dom-v6.4.2 [重复]
【发布时间】:2022-10-15 13:16:08
【问题描述】:

介绍

我创建了一个反应启动器应用程序

问题

我在/src/pages 中创建了一个名为AddCouponAddverticalAddmetadata 的组件。现在我在/src 中创建了一个文件Routes.js

路由.js

import React from 'react';
import {
    BrowserRouter as Router,
    Switch,
    Route,
    Link
} from "react-router-dom";
import AddCoupon from './pages/addCoupon';
import AddMetadata from './pages/addMetadata';
import AddVertical from './pages/addVertical';
import Login from './pages/login';


const Routes = () => {
    return (
        <>
            <Router>
                <Switch>
                    <Route path="/addcoupon">
                        <AddCoupon />
                    </Route>
                    <Route path="/addmetadata">
                        <AddMetadata />
                    </Route>
                    <Route path='/addvertical'>
                        <AddVertical />
                    </Route>
                    <Route path="/">
                        <Login />
                    </Route>
                </Switch>
            </Router>
        </>
    )
}

export default Routes

index.js

import React from 'react';
import ReactDOM from 'react-dom/client';
import './index.css';
import App from './App';
import reportWebVitals from './reportWebVitals';
import { BrowserRouter as Router } from 'react-router-dom'

const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(
  <React.StrictMode>
    <Router >
      <App />
    </Router>
  </React.StrictMode>
);


reportWebVitals();


我想要的是?

所以基本上我想要的是,当我输入 http:localhost:3000/addcoupon 时,它应该呈现 AddCoupon Component 并且对于其他 2 个组件也是如此,但现在它什么也没显示。

我不想使用任何导航栏。我想要的只是当我点击 Route.js 中提到的端点时,它应该呈现该组件。

【问题讨论】:

  • 精确添加到您的 Route 元素
  • 在所有路由元素中??
  • 如果您的 url 恰好是 /addvertical 您应该添加确切的内容以准确加载定义的组件
  • @MagnusEffect 我已经更新了我的答案,我希望它现在会有所帮助。
  • 您不能在反应路由器 v6 中使用 Switch。

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


【解决方案1】:

与早期版本相比,Router 6 使用不同的语法。请查看文档: https://reactrouter.com/en/v6.3.0/getting-started/overview

对于您的特定情况,您需要删除开关,并将元素传递给路由,并将所有 Route 元素包装在 Routes 元素中,如下所示:

const Routes = () => {
    return (
        <>
            <Routes>
                <Route path="/addcoupon" element={<AddCoupon />}/>
                <Route path="/addmetadata" element={<AddMetadata />}/>
                <Route path='/addvertical' element={<AddVertical />}/>
                <Route path="/" element={<Login />}/>
            </Routes>
        </>
    )
}

为了使路由工作,您还需要将App 元素包装在Router 元素中,如下所示:

import ReactDOM from 'react-dom'
import { BrowserRouter as Router } from 'react-router-dom'
import App from './App'
import './styles/index.scss'

ReactDOM.render(
   <Router>
      <App />
   </Router>,
   document.getElementById('root')
)

最后一步,在 App 元素内或任何你想使用它的地方渲染 Routes

const App = () => {
   return <Routes/>
}

【讨论】:

  • 这不起作用,我不知道为什么
  • 您能否也发布您的 index.js 文件。
  • 我已经发布了 index.js 文件。在最后一步中,是我构建的 &lt;Routes /&gt; 组件还是来自 react-router-dom 的组件?
  • &lt;Routes /&gt; 是您的组件。
  • 所以为了避免混淆,我将它重命名为RoutesComponent,现在它可以工作了。谢谢
猜你喜欢
  • 2022-01-21
  • 2022-07-07
  • 1970-01-01
  • 2022-07-09
  • 2022-12-04
  • 2021-11-11
  • 1970-01-01
  • 2018-01-28
  • 2019-10-17
相关资源
最近更新 更多