文章目录
- React-router的三个版本
- react-router使用
- 嵌套路由
- 动态路由
- 获取路由参数
- Params参数
- Query参数
- Location信息
- 控制跳转地址
- 异步路由
- 根据配置文件生成路由
React-router的三个版本
- React-router 服务端渲染使用
- React-router-dom 浏览器端渲染使用
- React-router-native React-native混合开发使用
其中React-router-dom用的最多
react-router使用
安装pnpm i react-router-dom
react全局插件的使用方式
React中没有vue那样的vue.use react中使用一个插件,库,都是引入一个组件,然后把要用该插件的部分包起来
通过BroserRouter或者HashRouter包裹要使用路由的根组件
在你想使用的组件上,这里不止根组件,任何组件包裹都可使用路由 非常方便
import { createRoot } from 'react-dom/client'import App from './App.tsx'import {BrowserRouter,HashRouter}from 'react-router-dom';createRoot(document.getElementById('root')!).render(<BrowserRouter><App /></BrowserRouter>)
使用Routes组件,定义路由显示区域
使用Route组件,定义具体路由规则
使用NavLink或者Link组件,定义跳转链接
NavLink会在当前组件加个active类名这也是他与Link组件的区别
import {Routes,Route,NavLink}from 'react-router-dom';import Page1 from './page1'import Page2 from './page2'import Page3 from './page3'import Page4 from './page4'function App() {return (<><h1>菜单</h1><div><NavLink to="/page1">page1</NavLink><NavLink to="/page2">page2</NavLink><NavLink to="/page3">page3</NavLink><NavLink to="/page4">page4</NavLink></div><Routes><Route path="/page1" element={<Page1></Page1>}></Route><Route path="/page2" element={<Page2></Page2>}></Route><Route path="/page3" element={<Page3></Page3>}></Route><Route path="/page4" Component={Page4}></Route></Routes></>)}
嵌套路由
Navigate-路由重定向
Outlet,嵌套路由的子路由显示处
//page1.tsx
import {Outlet} from 'react-router-dom'export default function page1 (){return (<><h1>page1</h1><Outlet></Outlet></>)}
//app.tsx
<Route path="/page1" element={<Page1></Page1>}><Route path="son" element={<Page1Son></Page1Son>}></Route></Route>
动态路由
<Route path="/page3/:id" element={<Page3></Page3>}></Route>
获取路由参数
Params参数
import {useParams} from 'react-router-dom'export default function page3 (){let params = useParams()console.log(params);return <h1>page3</h1>}
Query参数
//地址栏信息http://localhost:5173/page4?a=123&b=456
import {useSearchParams} from "react-router-dom"export default function page4 (){let [searchparams,setSearchParams] = useSearchParams();console.log(searchparams.get('a'))return (<><h1>page4</h1><button onClick={() => {setSearchParams({a:"666",b:"777"})}}>改变</button></>)}
Location信息
import {useLocation}from 'react-router-dom'export default function page2 (){let location = useLocation();console.log(location);return <h1>page2</h1>}
控制跳转地址
useNavigate创建跳转方法 然后跳转
import {Outlet,useNavigate} from 'react-router-dom'export default function page1 (){let nav = useNavigate()return (<><h1>page1</h1><Outlet></Outlet><button onClick={() => {nav("/page2",{state:{token:"hello"}})}}></button></>)}
异步路由
React做异步路由,要配合导react本身的一个方法-lazy和一个组件suspense
<Route path="/page4" element={<Suspense fallback={<h2>加载中...</h2>}><LazyPage4 /></Suspense>}></Route>
根据配置文件生成路由
//routerArr.tsx
import Page1 from '../page1'import Page2 from '../page2'import Page3 from '../page3'import Page4 from '../page4'
export default [{path:'/page1',component:Page1},{path:'/page2',component:Page2},{path:'/page3',component:Page3},{path:'/page4',component:Page4},]
//router.tsx
import {Route} from 'react-router-dom'const RouterMap = (routerArr:any) => {return routerArr.map((item:any) => {return <Route path={item.path} Component={item.component} ></Route>})}export default RouterMap
//app.tsx
<Routes>{ RouterMap(routerArr)}</Routes>
本篇文章到这里就结束了,如果对你有用的话就点个关注吧 会持续更新技术文章