网站首页 > 开源技术 正文
路由
一个路径path对应唯一的一个组件comonent 当我们访问一个path 自动把path对应的组件进行渲染
# 创建react项目
yarn create vite react-router --template react
npx create-react-app react-router
# 安装所有依赖包
yarn
npm i
# 安装react-router包
yarn add react-router-dom@6
npm i react-router-dom@6
# 启动项目
yarn dev
npm run start
demo:
import React, {Suspense} from 'react'
import ReactDOM from 'react-dom/client'
import App from '@/App'
import {RouterProvider} from "react-router-dom"
import 'normalize.css'
import '@/assets/css/index.less'
import router from '@/router'
import {Provider} from "react-redux"
import store from '@/store'
const root = ReactDOM.createRoot(document.getElementById('root'))
root.render(
<Suspense fallback={"loading..."}>
<Provider store={store}>
<RouterProvider router={router}>
<App/>
</RouterProvider>
</Provider>
</Suspense>
)
import {createBrowserRouter} from "react-router-dom"
import React from 'react'
const Layout = React.lazy(() => import('@/views/Layout'))
const NotFound = React.lazy(() => import('@/components/NotFound'))
const Month = React.lazy(() => import('@/views/Layout/Month'))
const Year = React.lazy(() => import('@/views/Layout/Year'))
const New = React.lazy(() => import('@/views/New'))
const router = createBrowserRouter([
{
path: '/',
element: <Layout/>,
children: [
{
index: true,
element: <Month/>
},
{
path: 'year',
element: <Year/>
}
]
},
{
path: '/new',
element: <New/>
},
{
path: '*',
element: <NotFound/>
}
])
export default router
Link
用于指定导航链接,完成声明式的路由跳转 类似于 <router-link/>
这里to属性用于指定路由地址,表示要跳转到哪里去,Link组件最终会被渲染为原生的a链接
编程式导航
- 导入一个 useNavigate 钩子函数
- 执行 useNavigate 函数 得到 跳转函数
- 在事件中执行跳转函数完成路由跳转
// 导入useNavigate函数
import { useNavigate } from 'react-router-dom'
const Home = () => {
// 执行函数
const navigate = useNavigate()
return (
<div>
Home
<button onClick={ ()=> navigate('/about') }> 跳转关于页 </button>
</div>
)
}
export default Home
路由传参
searchParams传参
params传参
嵌套路由
使用 Outlet 组件添加二级路由出口
默认二级路由
应用首次渲染完毕就需要显示的二级路由
实现步骤:
- 给默认二级路由标记index属性
- 把原本的路径path属性去掉
import { Outlet } from 'react-router-dom'
const Layout = () => {
return (
<div>
layout
{ /* 默认二级不再具有自己的路径 */ }
<Link to="/">board</Link>
<Link to="/article">article</Link>
{ /* 二级路由出口 */ }
<Outlet/>
</div>
)
}
猜你喜欢
- 2024-10-06 Bootstrap CSS概览(bootstrap core css)
- 2024-10-06 vue实现用户登录验证 + 权限验证 + 动态路由(左侧菜单栏)
- 2024-10-06 如何进行跨浏览器测试确保一致的用户体验
- 2024-10-06 CSS层叠技术:优化CSS重置,打造独特样式
- 2024-10-06 浏览器的兼容性问题如何解决(浏览器兼容性问题解决方案)
- 2024-10-06 在前端开发过程中,如何确保网站的兼容性?
- 2024-10-06 开发中可能会面临的真实问题及处理流程
- 2024-10-06 Modern CSS Reset 完全解读(reset.css和normalize.css)
- 2024-10-06 请避免犯这9个常见的 CSS “坏习惯”
- 2024-10-06 一组小型的自适应CSS模块,可以在每个Web项目中使用——Pure
你 发表评论:
欢迎- 最近发表
-
- 后端服务太慢?试试这 7 招(后端 服务端 区别)
- 做一个适合二次开发的低代码平台,把程序员从curd中解脱出来-1
- Caffeine缓存 最快缓存 内存缓存(caffeine缓存使用)
- Java性能优化的10大策略(java性能调优从哪几个方面入手)
- New Balance M576PGT 全新配色设计
- x-cmd pkg | qrencode - 二维码生成工具
- 平和精英抽奖概率是多少 平和精英抽奖物品一览
- x-cmd pkg | tmux - 开源终端多路复用器(terminal multiplexer)
- 漫威官方App中文版上线:全站漫画限时免费
- macOS Monterey 12.7.4 (21H1123) 正式版发布,ISO、IPSW、PKG 下载
- 标签列表
-
- jdk (81)
- putty (66)
- rufus (78)
- 内网穿透 (89)
- okhttp (70)
- powertoys (74)
- windowsterminal (81)
- netcat (65)
- ghostscript (65)
- veracrypt (65)
- asp.netcore (70)
- wrk (67)
- aspose.words (80)
- itk (80)
- ajaxfileupload.js (66)
- sqlhelper (67)
- express.js (67)
- phpmailer (67)
- xjar (70)
- redisclient (78)
- wakeonlan (66)
- tinygo (85)
- startbbs (72)
- webftp (82)
- vsvim (79)
本文暂时没有评论,来添加一个吧(●'◡'●)