我的编程空间,编程开发者的网络收藏夹
学习永远不晚

react-router-domV6嵌套路由实现详解

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

react-router-domV6嵌套路由实现详解

V6新特性

本片文章主要叙述react-router-dom v6版本基本使用介绍,下面开始梳理一下V6的新特性,以及嵌套路由的实现。

<Route>的属性变更component/render->element

//  v5
 <Route path='/login' component={<Suspense fallback={<Loading />}><Login /></Suspense>}>
 </Route>
//  v6
  <Route path='/login' element={<Suspense fallback={<Loading />}><Login /></Suspense>}>
  </Route>

<Link/>使用变动

// 如果当前url为/home 
// V5
<Link to="page1"> -> <Link to="/page1">
// V6做法
<Link to="page1"> -> <Link to="/home/page1">

当前在 /home 我需要跳转到/home/page1,在V5中是存在路由歧义的,但是V6已经修复了

<Redirect/> 替换为 <Navigate/>

// v5
<Redirect to='/login'/>
// v6
<Navigate to='/login' />

<Switch/> 重命名为 <Routes/>

// v5
// Suspense 异步加载
import {Switch,Router,Route} from 'react-router-dom'
  <Router>
    <Switch>  
        <Route path='/login'>
           <Suspense fallback={<Loading />}><Login /></Suspense>
        </Route>
        <Route path='/*' >
           <Suspense fallback={<Loading />}><NotFound /></Suspense>
        </Route>
    </Switch>
    </Router>
// v6
import {Routes,Router,Route} from 'react-router-dom'
  <Router>
    <Routes>  
        <Route path='/login' element={<Suspense fallback={<Loading />}><Login /></Suspense>}>
        </Route>
        <Route path='/*' element={<Suspense fallback={<Loading />}><NotFound /></Suspense>}>
        </Route>
    </Routes>
    </Router>

V5中使用component或者render去渲染,或者被当做子组件渲染,但是在V6这些方法都已经element被淘汰

用useNavigate代替useHistory

// v5
let history = useHistory()
history.push('/login');
history.replace('/login');
//v6
let navigate = useNavigate();
navigate('/login');
navigate('/login', {replace: true});

依赖包大小从20kb减少到8kb,整体体积减少

新钩子useRoutes代替react-router-config

function Page() {
  let pages = useRoutes([ 
    { path: '/login', element:<Login/> },
    // 404找不到
    { path: '*', element: <NotFound /> }
  ]);
  return pages;
} 

新标签:<Outlet/>

   <Content style={{ height: '90vh' }}>
    <Outlet></Outlet>
   </Content>

<Outlet/>的出现帮我们节省了很多代码逻辑避免了多个< Routes />,主要用于子组件显示,作用类似于Vue中的router-view

V6嵌套路由实现

  • 路由配置routers.js
export const routerItems  = [
      {
         path:'/',
         Component:lazy(()=>import('./views/root')),  
         redirect:'/designdraft',
         roles:[USER_ROLES.ADMIN,USER_ROLES.TEST],
         children:[
            {
               path:'designdraft',
               Component:lazy(()=>import('./views/designdraft/index')),  
               roles:[USER_ROLES.ADMIN], 
            },
            {
               path:'code',
               Component:lazy(()=>import('./views/code/index')),  
               roles:[USER_ROLES.ADMIN],
               children:[], 
            }, 
         ] 
      },
      {
          path:'/login',
          Component:lazy(()=>import('./views/login')),  
          children:[] 
       },
       {
         path:'*',
         Component:lazy(()=>import('./views/404')),  
         children:[] 
       }
]
  • 嵌套路由组件封装
import{ Suspense,lazy, useEffect } from 'react'; 
import {routerItems } from '../routers'; 
// 引入
import {
  HashRouter as Router,
  Routes,
  Route,
  Navigate,
} from 'react-router-dom';
// loading页面
const Loading = () => (
  <>
     <div className='loadsvg'> 
        <div>
          loading...
        </div>
     </div> 
  </>
)
// 递归函数
const rotuerViews = (routerItems)=>{ 
  if(routerItems && routerItems.length){
    return routerItems.map(({path,Component,children,redirect})=>{
        return children && children.length ? (
            <Route path={path} key={path} element={<Suspense fallback={<Loading/>}><Component/></Suspense>}>
                   {rotuerViews(children)} // 递归遍历子路由
                   {redirect?
                   (<Route  path={path} element={<Navigate to={redirect} />}></Route>):
                   (<Route path={path} element={<Navigate to={children[0].path} />}></Route>)
                   }
            </Route>
        ):(
          <Route   key={path} path={path} element={ <Suspense fallback={<Loading/>}><Component/></Suspense>}>
          </Route> 
        )
    })
  }
}
const PageView = () => { 
     return ( 
        <Router>
          <Routes> 
              {rotuerViews(routerItems)} 
          </Routes>
        </Router> 
     )
} 
export default PageView;
  • 视图显示
class Rootpage extends React.Component {
   // 状态型组件
   constructor(props) {
      super(props)
   }
   render() {
      //  页面嵌套路由需要通过,递归路由组件,判断是否存在redirect,进行路由重定向
      let token = sessionStorage.getItem('keys');
      return (
         <>
           <div>
             // 路由跳转
              <NavLink to="/designdraft" state="admin">designdraft</NavLink>
              <NavLink to="/code" state="admin">code</NavLink>
           </div>
           <div>
             // 子路由视图显示    
             <Outlet></Outlet>
           </div>
         </>
      )
   }
}
export default Rootpage
  • V5版本的路由嵌套在这里不再过多叙述了,如果你用React足够多,肯定会了解React-Router-dom-V5版本的嵌套是如何实现的

总结

React-Router-dom-V6版本不管是在体积上还是在功能方面都做了很大的升级,例如上面嵌套路由的写法来看V6确实比V5明显要好很多,毕竟代码量上就减少了不少?,还有就是修复了NavLink的Url问题。关于新特性的内容就讲述这么多吧,还有没提到的部分,自己可以去官方文档了解一下

以上就是react-router-domV6嵌套路由实现详解的详细内容,更多关于react-router-domV6嵌套路由的资料请关注编程网其它相关文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

react-router-domV6嵌套路由实现详解

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

react-router-domV6嵌套路由实现详解

这篇文章主要为大家介绍了react-router-domV6嵌套路由实现详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
2023-01-04

react嵌套路由实现TabBar的实现

本文主要介绍了react嵌套路由实现TabBar的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
2022-11-13

vue router学习之动态路由和嵌套路由详解

动态路由允许根据用户输入或服务器响应生成路由。VueRouter通过占位符语法实现此功能,嵌套路由允许创建具有层次结构的应用程序。动态嵌套路由进一步提供了基于输入生成嵌套路由的能力。除了这些功能外,VueRouter还提供了路由参数化、别名、过渡效果和导航守卫等其他功能。
vue router学习之动态路由和嵌套路由详解
2024-04-25

React中的路由嵌套和手动实现路由跳转的方式详解

这篇文章主要介绍了React中的路由嵌套和手动实现路由跳转的方式,手动路由的跳转,主要是通过Link或者NavLink进行跳转的,实际上我们也可以通JavaScript代码进行跳转,需要的朋友可以参考下
2022-11-13

全面解析vue router 基本使用(动态路由,嵌套路由)

VueRouter简介VueRouter是Vue.js官方的路由系统,用于管理单页应用程序中的路由。它支持动态路由、嵌套路由和导航守卫等特性。动态路由允许根据路由参数动态加载组件。嵌套路由可创建层次化的导航结构。导航守卫允许在导航切换页面之前或之后执行操作,实现权限控制、数据加载和过渡动画等功能。此外,VueRouter还提供路由别名、路由元数据、路由模式和过渡等特性。使用VueRouter需安装并配置,并在模板中使用router-link组件进行导航。
全面解析vue router 基本使用(动态路由,嵌套路由)
2024-04-25

vue嵌套路由怎么实现

本文小编为大家详细介绍“vue嵌套路由怎么实现”,内容详细,步骤清晰,细节处理妥当,希望这篇“vue嵌套路由怎么实现”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。用 Vue CLI 进行设置如果尚未安装,请运行以
2023-07-04

react-router-dom路由跳转怎么实现

react-router-dom路由跳转的实现方法:1、打开相应的js文件;2、通过useNavigate方法手动操作进行路由跳转;3、通过state属性进行路由传值,并用useLocation方法获取参数。
2023-05-14

vue router路由嵌套不显示问题的解决方法

解决VueRouter路由嵌套不显示问题的步骤:检查路由配置检查组件模板验证路由模式检查浏览器控制台检查组件生命周期钩子检查懒加载检查子路由检查占位符组件检查路由守卫检查生产模式其他提示:使用VueDevtools重新启动服务器/浏览器清除缓存/cookie降级应用程序版本
vue router路由嵌套不显示问题的解决方法
2024-04-25

react-router-dom路由跳转如何实现

这篇“react-router-dom路由跳转如何实现”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“react-router
2023-07-04

ReactRouter中实现嵌套路由和动态路由的示例

ReactRouter是一个非常强大和灵活的路由库,它为React应用程序提供了丰富的导航和URL管理功能,能够帮助我们构建复杂的单页应用和多页应用,这篇文章主要介绍了ReactRouter中如何实现嵌套路由和动态路由,需要的朋友可以参考下
2023-05-19

React使用Context与router实现权限路由详细介绍

这篇文章主要介绍了React使用Context与router实现权限路由的详细过程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧
2023-01-28

编程热搜

目录