老莫的笔记本  
  
查看: 282|回复: 0

React react-router-dom V6 的基本使用

[复制链接]

662

主题

878

帖子

5145

积分

超级版主

Rank: 8Rank: 8

积分
5145
发表于 2022-7-1 11:28:59 | 显示全部楼层 |阅读模式



  1. import React from "react";
  2. import { BrowserRouter, HashRouter,useNavigate, Link, Route, Router, Routes, NavLink,Outlet } from "react-router-dom";
  3. import TemJs from './temJs';
  4. import Animationc from './animationc';
  5. import './anmiationc.css';
  6. import TFrom from "./tFrom";
  7. import CssModelTest from "./cssModelTest";
  8. import UseNav from "./useNav";
  9. // 1.安装 npm install --save react-router-dom   注意
  10. // 2.引入 import { BrowserRouter, HashRouter , Link ,Route } from "react-router-dom";
  11. //   BrowserRouter, HashRouter  为包裹元素  ,指定监听模式
  12. //      BrowserRouter为 history 模式;   H5 新特性 如果不兼容低版本 建议使用
  13. //      HashRouter为hash 模式的 url 访问;  兼容低版本的时候使用
  14. // 3.Link 控制url 跳转
  15. // 4.Route 里面的path 用于匹配url ,   element  为显示的组件 [这里有个问题 component是老版本的 里面的显示不一样]
  16. // 5.V6版的react-router-dom 需要包裹一个  Routes

  17. // 7.理解  网页应用的路由 使用 react-router-dom ;   安卓应用的路由使用 react-router-native
  18. // 8. exact 表示精准匹配


  19. // 在V6 版本中activeClassName 和activeStyle 已经从NavLinkProps中移除,可以直接在<NavLink>的className和style中使用一个函数来使用active。
  20. {/*         <NavLink className={({ isActive }) =>
  21.                         isActive ? "active-menu" : undefined
  22.                     } to={'/temjs'}>模板</NavLink>  */}

  23. // 9. NavLink 和 Link 本体使用差别不大   ,不过 NavLink可以加 className 会自动和 NavLink里的 to 想匹配

  24. // 10 如果没有给Route 指定 path  他就和所有路由都匹配   <Route  element={<TemJs />} exact />

  25. // 11 Switch 是V5 版本的,作用是 如果匹配到一个 就不在继续朝下匹配[联想10 ], V6版本后 Switch废弃, <Switch>重命名为<Routes>。


  26. // 12. Redirect 资源重定向   V 6 废弃 直接在需要跳转的页面 写 <Navigate to="/login" /> 外层不需要嵌套

  27. // 13. 嵌套路由  【 被引入的子路由,再别的地方引入会报错,因为 子路由显示位置 外层包裹的 Router 问题  】

  28. // 14. 手动跳转 路由

  29. //    V5 已经废弃 [下面都是]
  30. //    分为两种: hash 模式 和正常模式  如果是hash模式 只需要JS 设置hash值即可  window.location.hash ='/discover/playLis
  31. //    如果一个组件是通过【路由组件创建】出来的,那么系统会自动传递一个hash值给我们,只需要拿这个history对象 ,调用这个对象的push 方法修改资源地址就可以 this.props.history.push('/login/new');               
  32. //    类似APP等组件不是通过路由创建的,如果要使用 history对象,需要搭配withRouter ; 写法 export default withRouter(APP);    已经废弃
  33. //    上一条需要找个组件外面包裹 BrowserRouter类组件,用到地方都包 所以-我个人觉得方法很多种 这个真麻烦 已经废弃



  34. //   v6  在JS种使用 useNavigate进行跳转 [但是仅限于 function 类 , class类不能用] 已经单独记录 ,qing'fan


  35. //  17  使用 react-router-config 可以对路由实现统一管理

  36.    
  37. class NewRouter extends React.Component {
  38.     constructor() {
  39.         super();
  40.         this.state = {
  41.             num: 123,
  42.             aColor: '#a20ddf'
  43.         }
  44.     }

  45.     render() {
  46.         return (
  47.             <section>
  48.                 <BrowserRouter>
  49.                     {/* <Link  activeclassname='active-menu' to={'/animationc'} >动画</Link>
  50.                     <Link activeclassname='active-menu' to={'/temjs'}>模板</Link>   */}
  51.                     <NavLink  className={({ isActive }) =>
  52.                         isActive ? "active-menu" : undefined
  53.                     }  to={'/animationc'} >动画</NavLink>
  54.                     {/* <NavLink activeclassname="active-menu" to={'/temjs'}>模板</NavLink>    这种写法已经没了 */}  
  55.                     <NavLink className={({ isActive }) =>
  56.                         isActive ? "active-menu" : undefined
  57.                     } to={'/temjs'}>模板</NavLink>  
  58.                      {/* <NavLink className={({ isActive }) =>
  59.                         isActive ? "active-menu" : undefined
  60.                     } to={'/tform'}>新闻</NavLink>   */}
  61.                     {/* <NavLink className={({ isActive }) =>
  62.                         isActive ? "active-menu" : undefined
  63.                     } to={'/login'}>登录</NavLink>  */}
  64.                     {/* <NavLink className={({ isActive }) =>
  65.                         isActive ? "active-menu" : undefined
  66.                     } to={{
  67.                         pathname:'/login',
  68.                         state:{
  69.                             name:'2222'
  70.                         }
  71.                     }}>登录</NavLink>  */}
  72.                     <NavLink className={({ isActive }) =>
  73.                         isActive ? "active-menu" : undefined
  74.                     } to={'/login'}  state={{ id: 999, name: "i love merlin" }} >登录</NavLink>

  75.                     <Routes >
  76.                         <Route path={'/animationc'} element={<Animationc />}   />
  77.                         <Route path={'/temjs'} element={<TemJs />}  />
  78.                         {/* <Route path={'/tform'} element={<TFrom />} />  */}
  79.                         <Route path={'/login/*'} element={<CssModelTest />}  />
  80.                         {/* <Route component={Other} /> */}
  81.                     </Routes>
  82.                     
  83.                 </BrowserRouter>
  84.                
  85.                 <button onClick={()=>{ this.go() }}> 点击跳转链接 </button>
  86.                  
  87.                     <UseNav></UseNav>


  88.             </section >
  89.         );
  90.     }
  91.     go(){
  92.         
  93.         // const navigate = useNavigate();  
  94.         // this.props.history.push('/login/new');
  95.         // useNavigate('/login/new');
  96.         // navigate('/login/new');
  97.         window.location= '/login/new';
  98.     }


  99. }



  100. export default NewRouter;



复制代码
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表