React Router v6使用路由嵌套和重定向

前言:React Router v5 和 v6 在嵌套路由中实现重定向的方式有所不同。在 v5 中,我们可以使用 <Redirect> 组件来实现重定向;而在 v6 中,我们需要使用 navigate 函数来实现重定向。

index.js

import React from 'react'
import ReactDOM from 'react-dom/client'
import { BrowserRouter as Router, Routes, Route, Navigate } from 'react-router-dom'
// 路由组件
import App from './App'
import Layout from './pages/Layout'
import Login from './pages/Login'
import NotFound from './pages/NotFound'

// 导入子 路由组件
import Home from './pages/Home'
import ArticleList from './pages/ArticleList'
import ArticlePublish from './pages/ArticlePublish'

// 样式
import './index.less'

const root = ReactDOM.createRoot(document.getElementById('root'))
root.render(
    <Router>
        <Routes>
            <Route path="/" element={<App />}>
                {/**这里重定向到home页面 */}
                <Route path="/" element={<Navigate to="/home" />}></Route>

                <Route path="/home" element={<Layout />}>
                    <Route exact path="/home" element={<Home />} />
                    <Route path="/home/article" element={<ArticleList />} />
                    <Route path="/home/publish" element={<ArticlePublish />} />
                </Route>

                <Route path="/login" element={<Login />}></Route>
                {/* 404页面 */}
                <Route path="*" element={<NotFound />}></Route>
            </Route>
        </Routes>
    </Router>
)
// ReactDOM.createRoot(document.getElementById('root')).render(<App />)

最后顺带提一下,因为子路由会继承父路由的路径,还可以 写成这样:


        <Routes>
            <Route path="/" element={<App />}>
                // 1.可以不要/home 相当于去 home 根页面
                <Route path="/" element={<Navigate to="home" />}></Route>
                // Layout页面
                <Route path="home" element={<Layout />}>
                    // 2.exact精确匹配,相当于去到 /home
                    <Route exact path="/home" element={<Home />} />

                    // 都是继承父路由Layout组件的路径 相当于去到 /home/article页面
                    <Route path="article" element={<ArticleList />} />
                    <Route path="publish" element={<ArticlePublish />} />
                </Route>

                <Route path="login" element={<Login />}></Route>
                {/* 404页面 */}
                <Route path="*" element={<NotFound />}></Route>
            </Route>
        </Routes>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

海424

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值