react-router-dom 路由传参和获取参数以和详细解剖
react-router-dom v6.3
安装路由
npm react-router-dom
路由容器
<BrowserRouter>history模式</BrowserRouter>
<HashRouter>hash模式</HashRouter>
注:以上两个容器最好放到最顶层的组件之外
Route 组件
<Route path="" element={标签名}></Route>
注:element 必须以标签的形式去引用
Routes 组件(相当于老版本的switch)
要求Route 必须包括在Routes组件里面
如:<Routes>
<Route path="" element={标签名}></Route>
</Routes>
route中的 exact 属性
在V6版本中默认就是完整匹配
如果你想模糊匹配:在路径后面添加/*
如:<Route path="/index/*" element={<Index></Index>}></Route>
Link 类似a标签
<link to="/index"></Link>
NavLink 类似a标签
和link的区别是navLink 有激活状态(通过 className 和 style )
<NavLink to="/index" className = {({isActive})=>{
return isActive?'active':''
}}></NavLink>
<NavLink to="/index" style = {({isActive})=>{
return isActive?{
color:'red'
}:''
}}></NavLink>
Navigate 重定向
<Navigate />
使用:<Route path="/" element={<Navigate to="/login"/>}/> push的形式
:<Route path="/" replace element={<Navigate to="/login"/>}/> replace的形式
push 和 replace
注: push 有历史记录可以后退
replace 没有历史记录不可以后退
嵌套路由
现在只有相对路径了
关键的来了
useRoutes
import {useRoutes} from 'react-router-dom'
const getRoutes = ()=>{
retrun useRoutes([
{
element:<Index/>
path:'/index'
},
{
element:<Login/>,
path:'/login'
},
{
//子路由
path:'/about',
element:<About/>,
children:[
//这里只能使用相对路径
{
path:'',
element:<JoinUs/>
},
{
path:'joinusa',
element:<JoinUsa/>
}
]
}
])
}
使用的时候
<GetRoutes/> 只能按照标签的格式使用
编程式导航 useNavigate 来实现
import {useRoutes} from 'react-router-dom'
const navigate = useNavigate();
navigate('/login');//这个是push的方式跳转
navigate('/login',{replace:true});//这个是replace的方式跳转
navigate(-1);//回退一步 -2回退两步
携带参数
//携带 search 参数
navigate('/login?a=1');
//携带 params 参数
navigate('/login/${id}/${name}');
//携带 state 参数 不显示url上面 但是刷新会丢失数据
navigate('/login',{state:{a:1,b:1}})
获取路由传参
useParams //获取路由传参
const params = useParams(); console.log(params);
useSearchParams //获取url传参
const [search,setSearch] = useSearchParams();
console.log(search.get('id'));
useLocation //获取state传参
const {state:{id}} = useLocation();
console.log(id)
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhgffgcf
系列文章
更多
同类精品
更多
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
怎样阻止微信小程序自动打开
PHP中文网 06-13 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01