经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » JS/JS库/框架 » React » 查看文章
react-router-domV6版本的路由和嵌套路由写法详解
来源:jb51  时间:2022/3/7 12:37:02  对本文有异议

1 - 单级路由

  1. <NavLink to="/home">Home</NavLink>
  2. <NavLink to="/about">about</NavLink>
  3.  
  4. <Routes>
  5. ? <Route path='/home' element={<Home/>}/>
  6. ? <Route path='/about' element={<About/>}/>
  7. </Routes>

2 - 嵌套路由(about路径进行嵌套)

一级路由

  1. <NavLink to="/home">Home</NavLink>
  2. <NavLink to="/about">about</NavLink>
  3.  
  4. <Routes>
  5. ? <Route path='/home' element={<Home/>}/>
  6. ? <!--要嵌套的路由这里一定要写/* ?为了告诉这个路由后续会跟着其它路径
  7. ?? ?NavLink 千万不要写和Route一样的/about/*
  8. ?? ?否则/about 这个按钮路由css中的active会消失
  9. ? ?-->
  10. ? <Route path='/about/*' element={<About/>}/>
  11. </Routes>

二级路由

跳转按钮一般最好写完整,否则看代码看不清楚

  1. <NavLink to="/about/news">新闻</NavLink>
  2. <NavLink to="/about/message">消息</NavLink >
  3.  
  4. <Routes>
  5. ? ? <Route path='news' element={<News/>}/>
  6. ? ? <Route path='message' element={<Message/>}/>
  7. </Routes>

跳转切换的path要写二级路由的路径

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

v6版本与v5版本差异较大,以下为V6使用路由嵌套及路由重定向方法,子路由路径不用加"/",v6中会自动拼接

App.jsx

  1. import React, { Component } from 'react'
  2. import { Route,Routes,Navigate} from 'react-router-dom'
  3. import About from './pages/About'
  4. import Home from './pages/Home'
  5. import Header from './components/Header'
  6. import MyNavLink from './components/MyNavLink'
  7. export default class App extends Component {
  8. ? ? render() {
  9. ? ? ? ??
  10. ? ? ? ? return (
  11. ? ? ? ? ? ??
  12. ? ? ? ? ? ? <div>
  13. ? ? ? ? ? ? ? ??
  14. ? ? ? ? ? ? ? ? <div className='row'>
  15. ? ? ? ? ? ? ? ? ? ? <Header/>
  16. ? ? ? ? ? ? ? ? </div>
  17. ? ? ? ? ? ? ? ? <div className='row'>
  18. ? ? ? ? ? ? ? ? ? ? <div className='col-xs-2 col-xs-offset-2'>
  19. ? ? ? ? ? ? ? ? ? ? ? ? <div className='list-group'>
  20. ? ? ? ? ? ? ? ? ? ? ? ? ? ? {/* 链接路由 */}
  21. ? ? ? ? ? ? ? ? ? ? ? ? ? ? <MyNavLink to="/about" >About</MyNavLink>
  22. ? ? ? ? ? ? ? ? ? ? ? ? ? ? <MyNavLink ?to="/home" >Home</MyNavLink>?
  23. ??
  24. ? ? ? ? ? ? ? ? ? ? ? ? </div>
  25. ? ? ? ? ? ? ? ? ? ? </div>
  26. ? ? ? ? ? ? ? ? </div>
  27. ? ? ? ? ? ? ? ? <div className='col-xs-6'>
  28. ? ? ? ? ? ? ? ? ? ? <div className='panel'>
  29. ? ? ? ? ? ? ? ? ? ? ? ? <div className='panel-body'>
  30. ? ? ? ? ? ? ? ? ? ? ? ? ? ? {/* 注册路由 */}
  31. ? ??
  32. ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? <Routes>
  33. ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? ??? ?{/* 首次进入页面是重定向到/about路径 */}
  34. ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? <Route path="*" element={<Navigate to="/about"/>}></Route>
  35. ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
  36. ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? <Route path="/about" element={<About/>}></Route>
  37. ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? <Route path="/home/*" element={ <Home/>}>?? ??? ??? ??? ??? ??? ??? ??? ??? ?
  38. ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? </Route>
  39. ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? </Routes>
  40. ? ? ? ? ?
  41. ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
  42. ? ? ? ? ? ? ? ? ? ? ? ? </div>
  43.  
  44. ? ? ? ? ? ? ? ? ? ? </div>
  45. ? ? ? ? ? ? ? ? </div>
  46. ? ? ? ? ? ? </div>
  47. ? ? ? ? ? ??
  48. ? ? ? ? )
  49. ? ? }
  50. }

Home/index.jsx

  1. import React, { Component } from 'react'
  2. import MyNavLink from '../../components/MyNavLink'
  3. import {Route,Routes,Navigate} from 'react-router-dom'
  4. import News from './News'
  5. import Messages from './Messages'
  6. export default class Home extends Component {
  7. ? ? render() {
  8. ? ? ? ? return (
  9. ? ? ? ? ? ?<div>
  10. ? ? ? ? ? ? ? ?<h3>Home内容</h3>
  11. ? ? ? ? ? ? ? ?<div className='list-group'>
  12. ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? <MyNavLink to="news" >News</MyNavLink>
  13. ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? <MyNavLink ?to="messages" >Messages</MyNavLink> ?
  14. ? ? ? ? ? ? ? ? </div>
  15. ? ? ? ? ? ? ? ? <div>
  16. ? ? ? ? ? ? ? ? ? ? <Routes>
  17. ? ? ? ? ? ? ? ? ? ? ?? ?
  18. ? ? ? ? ? ? ? ? ? ? ? ? <Route path="*" element={<Navigate to="messages"/>}></Route>
  19. ? ? ? ? ? ? ? ? ? ? ? ? <Route path="news" element={<News/>}></Route>
  20. ? ? ? ? ? ? ? ? ? ? ? ? <Route path="messages" element={<Messages/>}></Route>
  21. ? ? ? ? ? ? ? ? ? ? </Routes>
  22. ? ? ? ? ? ? ? ? </div>
  23. ? ? ? ? ? ?</div>
  24. ? ? ? ? )
  25. ? ? }
  26. }

Home/Messages/index.jsx

  1. import React, { Component } from 'react'
  2.  
  3. export default class Messages extends Component {
  4. ? ? render() {
  5. ? ? ? ? return (
  6. ? ? ? ? ? ? <ul>
  7. ? ? ? ? ? ? ? ? <li>message1</li>
  8. ? ? ? ? ? ? ? ? <li>message2</li>
  9. ? ? ? ? ? ? ? ? <li>message3</li>
  10. ? ? ? ? ? ? ? ? <li>message4</li>
  11. ? ? ? ? ? ? </ul>
  12. ? ? ? ? )
  13. ? ? }
  14. }

MyNavLink/index.jsx

  1. import React, { Component } from 'react'
  2. import { NavLink } from 'react-router-dom'
  3. export default class MyVavLink extends Component {
  4. ? ? render() {
  5. ? ? ? ? return (
  6. ? ? ? ? ? ? <NavLink ?className="list-group-item" {...this.props}/>
  7. ? ? ? ? )
  8. ? ? }
  9. }

到此这篇关于react-router-domV6版本的路由和嵌套路由写法详解的文章就介绍到这了,更多相关React Router v6路由和嵌套路由内容请搜索w3xue以前的文章或继续浏览下面的相关文章希望大家以后多多支持w3xue!

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号