React-Router-6学习笔记

一、新建react项目

1、新建项目命令:

yarn create vite react-router --template react

2、在vsCode中打开项目

3、在vsCode打开命令终端,输入

yarn

4、执行yarn dev启动当前项目

yarn dev

5、删除多余的东西,保留app.jsx和main.jsx文件即可

6、重新打开终端,安装react-router(版本:"react-router-dom": "^6.16.0")

yarn add react-router-dom

二、快速搭建一个简单的路由demo

1、引入createBrowserRouter方法和RouterProvider组件

  • main.jsx文件引入: 

  • 代码: 
import { createBrowserRouter, RouterProvider } from 'react-router-dom'

 注意:

createBrowserRouter:创建路由实例在方法中定义路由path和组件的对应关系。

RouterProvider:作为一个组件渲染 并且传入createBrowserRouter执行之后生成的router实例。

2、调用 createBrowserRouter配置路由path和组件的对应关系生成router实例

  • main.jsx文件router:  

  • 代码:
const router = createBrowserRouter([
  {
    path:'/',
    element:<div>home</div>
  },
  {
    path:'/login',
    element:<div>login</div>
  }
])

3、渲染RouterProvider组件并传入router实例

  • main.jsx文件组件:

 

  • 代码:
<RouterProvider router={router}/>

三、抽离单独组件和路由独立文件

1、抽离单独组件

  •  新建一个文件夹,再新建三个jsx文件的组件

  • 其中一个代码:(其余三个代码差不多,换一下名字就行)
const Home = () => {
    return <div>
        Home
    </div>
}

export default Home
  •  在main.jsx文件里引入:

  • 将引入的组件放到对应的element里去

 运行结果展示:

2、配置路由独立文件

  • 新建一个文件用来抽离路由

 

  • 将main.jsx文件中对路由的配置移动过去,且将router进行导出 
import { createBrowserRouter } from 'react-router-dom'

import About from '../pages/About.jsx'
import Home from '../pages/Home.jsx'
import Login from '../pages/Login.jsx'

const router = createBrowserRouter([
    {
        path: '/',
        element: <Home />
    },
    {
        path: '/login',
        element: <Login />
    },
    {
        path: '/about',
        element: <About />
    }
])

export default router
  • main.jsx文件引入router(其他照旧)
import router from './router/index'

运行结果与上面一致

四、路由的两种模式说明

 1、history模式

注意:利用createBrowserRouter创建的路由属于history模式

  • 代码:
import { createBrowserRouter } from 'react-router-dom'

const router = createBrowserRouter([
    
])

2、hash模式 

注意:利用createHashRouter创建的路由属于hash模式

  • 代码:
import { createHashRouter } from 'react-router-dom'

const router = createHashRouter([

])

3、hash模式和history模式的区别

 注意:最简单的区别就是路由访问的时候一个有#一个没有。history模式需要后端的支持,hash模式不需要。

 五、编程是导航实现

1、导入一个useNavigate钩子函数

import { useNavigate } from 'react-router-dom'

2、执行useNavigate函数得到跳转函数

  • 代码:
const navigate = useNavigate()

3、在事件中执行跳转函数执行路由跳转

  • 整体代码:
import { useNavigate } from 'react-router-dom'

const Home = () => {
    const navigate = useNavigate()
    const goAbout = () => {
        navigate('/about')
    }
    return <div>
        <button onClick={goAbout}>go About</button>
    </div>
}

export default Home

六、路由记录替换

注意:路由跳转过去后,直接销毁上一页路由,点击返回无法返回上一页。 

  • 将跳转事件中的函数navigate函数第二个参数加上

  •  代码:
navigate('/', { replace: true })

七、路由跳转传参useSearchParams

1、searchParams传参

传参: 

注意:查询只字符串传参的方式比较简单,参数的形式以问号拼接到地址后面。

  •  直接在navigate函数里?加上传递的参数

  • 代码:
navigate('/about?id=123')

接收参数: 

  • 引入useSearchParams函数
import { useSearchParams } from 'react-router-dom'
  • 解构useSearchParams方法 ,通过get方法获取值

  • 代码: 
const [params] = useSearchParams()
let id = params.get('id')

代码演示: 

  • 在home页面点击button跳转到about页面

 

  • about页面已经将值显示在了连接上,和页面上 

2、useSearchParams传递多个参数

传递参数: 

  • 在原始传参的后面有&符号做传参的分割

  • 代码:
navigate('/about?id=123&name=简隋英')

接收参数: 

  • 引入useSearchParams函数
import { useSearchParams } from 'react-router-dom'
  • 解构useSearchParams方法 ,通过get方法获取值

  • 代码: 
    const [params] = useSearchParams()
    let id = params.get('id')
    let name = params.get('name')

代码演示: 

  • 在home页面点击button跳转到about页面

 

  • about页面已经将值显示在了连接上,和页面上 

八、路由跳转传参params

传递参数:

  •  在home页面的跳转函数后面添加( /参数 )
navigate('/跳转页面/参数数据')
  •  例子:

navigate('/about/123')
  • 在路由配置文件里,去配置动态路由( /:属性 ) 
  • 例子:

接收参数:

  • 引入useParams获取接收参数的函数 
import { useParams} from 'react-router-dom'
  •  调用useParams获取所有传递过来的值
let params = useParams()
//该代码运行结果
{ id: 123 }
  • 或传递过来的值
let id = params.id

 九、嵌套路由

场景:在我们做的很多管理后台系统中,通常我们都会设计一个Layout组件,在它内部实现嵌套路由。

 

1、准备二级路由组件Board和Article

 

  • 组件内容:(Board和Article差不多)
const Board = () => {
    return <div>Board</div>
}

export default Board

 

2、在路由表中通过children属性,进行二级路由配置在

  • 在index.jsx中引入组件
// 二级路由引入
import Article from '../pages/second/Article.jsx'
import Board from '../pages/second/Board.jsx'
  • 配置路由表中的children属性

 

  • 代码:
const router = createBrowserRouter([
    {
        path: '/',
        element: <Home />,
        children: [
            {
                path: 'article',
                element: <Article />
            },
            {
                path: 'board',
                element: <Board />
            }
        ]
    },
    {
        path: '/login',
        element: <Login />
    },
    {
        path: '/about/:id',
        element: <About />
    }
])

 

3、通过内置组件Outlet渲染二级路由组件

  • 在Home组件内,需要二级页面渲染的地方添加outlet组件

  • 代码: (需要引入)
import { Outlet, useNavigate } from 'react-router-dom'
<Outlet/>

 

4、通过内置组件Link进行声明式导航配置

  •  引入Link组件
import { Outlet, useNavigate,Link } from 'react-router-dom'
  • 配置Link组件的跳转

 

运行结果:

 

 注意:Link上的路由是,原始路由+二级路由地址

 

 

十、默认二级路由渲染

 1、设置index:true,

  •  直接将需要作为默认页的path设置为index:true就可以了

  • 执行显示:(跳转页面后Article组件直接显示出来) 

 

 

2、将Link默认的渲染路径改成主页面的路径

 

 

 

十一、404页设计 

1、引入NotFund页面

import NotFund from '../pages/NotFund'

2、路由页面设置*

3、配置NotFund组件内容

const NotFund = () => {
    return <div>404</div>
}

export default NotFund

4、执行结果

 

完 

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
引用:react-router-dom是一个用于React应用程序的路由库。它提供了一种管理应用程序中不同页面之间导航的方式。react-router-dom有几个相关的模块,包括react-router-native、react-router-redux和react-router-config等。其中,react-router-native是用于React Native应用程序的绑定,react-router-redux是与Redux结合使用的模块,而react-router-config则是一个用于静态路由配置的助手。 引用:在使用react-router-dom的v6版本时,可以通过使用useRoutes函数来绑定路由配置。在一个App组件中,可以导入routes文件,并在App组件中使用useRoutes函数将路由配置渲染到页面上。 引用:在v6版本中,可以选择使用BrowserRouter或HashRouter来包裹整个应用程序的组件。BrowserRouter和HashRouter的作用都是为了管理地址栏的URL,但BrowserRouter使用的是正常的URL路径,而HashRouter修改的是地址栏的hash值。另外,在v6版本中,可以使用<Routes>和<Route>来进行路由配置,其中<Routes>用于包含多个<Route>组件,每个<Route>对应一个页面。 所以,如果你想了解react-router-dom v6的更多内容,可以参考官方文档或查看相关示例代码。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [react-router:react-router 中文文档](https://download.csdn.net/download/weixin_42166261/18230223)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [react-router-dom V6 中文文档教程总结](https://blog.csdn.net/xm1037782843/article/details/127454966)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [React学习笔记_React Router 6](https://blog.csdn.net/qq_20470063/article/details/123361115)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值