关于umi中使用Link传参方式的理解

今天在项目中发现Link传参的方式出现了两种,一种使用state。另一种使用umi官方示例的写法,虽然两种方法都能实现参数的传递,但在history.back()时,在谷歌浏览器和Safari浏览器上出现了state丢失问题,在火狐浏览器上没有发现。附上代码写法:

使用state写法:

<Link to={{pathname:`/breakpromise-manager/${record.id}/detail`,state:{typeId:record.orgType}}}>{text}</Link>
取值:let orgType = this.props.location.state.typeId;

umi官方写法:

<Link to={`/official-manager/${record.id}/detail?documentQuery=${this.props.location.query.documentQuery}`}>{text}</Link>
取值:this.props.location.query.documentQuery

针对这个问题,我进行了一些了解,umi的Link来源于react-router-dom,而react-router-dom是对react-router的封装,根据《深入理解React技术栈》一书中对于React Router特性的描述,当location发生变化的时候,会触发重新绘制View的操作。

当history.back()执行时,location发生变化,state被重置,当重新绘制View时,从state中取值的操作将会发生错误。

官方写法的参数是放在props中,根据书中对于props的描述,props本身是不可变的,故此写法比state的写法更为保险。

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值