最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • React(博客系列二),路由传参的几种方式

    正文概述 掘金(小鱼养殖大户)   2021-01-08   797

    1.params(动态路由)方式

    地址栏可见,与拼接的地址不一样(不会有问号),刷新仍然存在

    路由配置

    <Route path='/home/:id' component={Home} />
    

    跳转传参

     <NavLink className="right-link" to='/home/1' onClick={() => setActiveName({ name: '博客首页', path: "/home" })}>            <HomeOutlined /> 博客首页          </NavLink>
    

    页面取值

    props取值

    props.match.params.id
    

    使用hooks取值

    简单介绍一下路由里面几个hooks的用法,以下是控制台打印出来的每个hooks

    useHistory

    React(博客系列二),路由传参的几种方式

    useLocation

    React(博客系列二),路由传参的几种方式

    useParams

    React(博客系列二),路由传参的几种方式

    useRouterMatch

    React(博客系列二),路由传参的几种方式

    由上可以看出只有useParams、useRouterMatch两个hooks可以用来取params的值

    通过react-router-dom里面的useParams取值

    const param: Params = useParams()
    console.log(param.id);
    

    通过react-router-dom里面的useRouterMatch取值

    const match: Params = useRouteMatch()console.log(match.param.id);
    

    2.get(类似query)方式

    地址栏可见,刷新仍然存在

    路由配置

    <Route path='/frame' component={Frame} />
    

    跳转传参,不再支持query在路由对象里面传参的方式了(自测不成功),这里使用了拼接的方式(参考官网的)

    <NavLink className="right-link" to='/frame?name=yydbb' onClick={() => setActiveName({ name: '前端框架', path: "/frame" })}>            <ShareAltOutlined /> 前端框架          </NavLink>
    

    页面取值

    props取值,打印一下props

    React(博客系列二),路由传参的几种方式

    可以看出我们的参数在location的saerch里面, 官方提供一种使用自定义hook(封装统一使用)获取这个参数

    自定义hook

    import { useLocation } from 'react-router-dom'export function useQuery() {  return new URLSearchParams(useLocation().search);}
    

    页面使用

    import { useQuery } from '../hooks/useQuery'
    const query = useQuery()
    const name = query.get('name')
    

    现在我们试着用props取query,原理和上面一样,所以建议使用上面的方法

    const nameParams = new URLSearchParams(props.location.search)console.log(nameParams.get('name'));
    

    3.state方式

    地址栏不可见,刷新不存在

    路由配置

    <Route path='/note' component={Note} />
    

    跳转传参

    <NavLink className="right-link" to={{pathname:'/note',state:{id:12}}} onClick={() => setActiveName({ name: '搭建笔记', path: "/note" })}>            <BarsOutlined /> 搭建笔记          </NavLink>
    

    页面取值

    props取值,这里的取值是有点麻烦的,涉及到类型定义,路由里面的state类型为unknown,所以我们使用了联合类型,自定义了一个type MLocation,解决了这个state的类型报错问题

    import React from 'react';import { RouteComponentProps, useLocation, useHistory } from 'react-router-dom'type SLocation = {  state?: {    id: number  }}type MLocation<S> = {  location: S}type combineProps = RouteComponentProps & MLocation<SLocation>const Note: React.FC<combineProps> = (props) => {  console.log(props.location.state?.id);  const history: MLocation<SLocation> = useHistory()  console.log(history.location.state?.id);  const location: SLocation = useLocation()  console.log(location.state?.id);  return (    <div className="App">      {props.location.state?.id}    </div>  );}export default Note;
    

    hooks取值

    useHistory、useLocation

    const history: MLocation = useHistory()console.log(history.location.state?.id);const location: SLocation = useLocation()console.log(location.state?.id);
    

    结语

    由于项目中用到react-router-dom,所以花了点时间粗略(不全)的了解了一下,做个小笔记


    起源地下载网 » React(博客系列二),路由传参的几种方式

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元