文章详情

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

请输入下面的图形验证码

提交验证

短信预约提醒成功

react-router v6新特性总结示例详解

2022-12-26 18:00

关注

由于之前的项目一直使用的是V5版本,最新新建项目的时候,默认使用的是V6版本,根据官方的介绍,V6版本的新特性如下。

新特性

<Switch>重命名为<Routes>

在V6版本中,<Switch>组件被替换成<Routes>组件,同时,component属性被element属性替换。


<Switch>
  <Route exact path="/" component={Home} />
  <Route path="/user/:id" render={(routeProps) => <User id={routeProps.match.params.id} />} />
</Switch>


<Routes>
  <Route path="/" element={<Home />} />
  <Route path="user/:id" element={<User id={id} />} />
</Routes>

同时,组件还修改了如下一些内容:

支持嵌套路由

在V6版本中, <Route>标签支持嵌套,可以在一个文件内配置嵌套路由,便于统一管理路由。

import { HashRouter as Router, Routes, Route } from 'react-router-dom'
import Home from '@/pages/demo/Home'
import Foo from '@/pages/demo/Foo'
import Bar from '@/pages/demo/Bar'
import BarDetail from '@/pages/demo/BarDetail'
import '@/assets/style/App.css'
function App() {
 return (
   <Router>
     <Routes>
       <Route path="/" element={<Home />} />
       <Route path="foo" element={<Foo />} />
       {}
       <Route path="bar" element={<Bar />}>
         <Route path=":id" element={<BarDetail />} />
       </Route>
     </Routes>
   </Router>
 )
}
export default App

Outlet

在嵌套路由场景,我们需要在父路由中使用Outlet组件,用于渲染子路由。

import { Outlet } from 'react-router-dom'
function Bar() {
  return (
    <div>
      <div>Bar</div>
      {}
      <Outlet />
    </div>
  )
}
export default Bar

嵌套路由可配置化

在V6版本中,我们可以使用useRoutes代替react-router-config配置。如果需要用到嵌套路由,那么Outlet组件也是必要的。

import { useRoutes } from 'react-router-dom'
import Home from '@/pages/demo/Home'
import Foo from '@/pages/demo/Foo'
import Bar from '@/pages/demo/Bar'
import BarDetail from '@/pages/demo/BarDetail'
import '@/assets/style/App.css'
function App() {
  let element = useRoutes([
    {
      path: '/',
      element: <Home />
    },
    {
      path: 'foo',
      element: <Foo />
    },
    {
      path: 'bar',
      element: <Bar />,
      children: [
        {
          path: ':id',
          element: <BarDetail />
        }
      ]
    }
  ])
  return element
}
export default App

需要注意的是,如果是使用此方式注册路由配置,需要在入口文件添加Router包裹App组件,否则会报错。

import React from 'react'
import ReactDOM from 'react-dom'
import { HashRouter as Router } from 'react-router-dom'
import App from '@/App'
import '@/assets/style/index.css'
ReactDOM.render(
  <React.StrictMode>
    <Router>
      <App />
    </Router>
  </React.StrictMode>,
  document.getElementById('root')
)

useNavigate代替useHistory


const history = useHistory()
history.push('/home')
history.replace('/home')
history.goBack()
history.goForward()
history.go(2)

const navigate = useNavigate()
navigate('/home')
navigate('/home', {replace: true})
navigate(-1)
navigate(1)
navigate(2)

参考说明:https://reactrouterdotcom.fly.dev/

到此这篇关于react-router v6新特性总结的文章就介绍到这了,更多相关react-router v6新特性内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

阅读原文内容投诉

免责声明:

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

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

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-前端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯