React Router同时传递search与state

问题

在React Router中,无法直接同时传递search与state。下面代码中,使用对象的形式定义to属性,在pathname中加入search,同时添加state属性。

<MyNavLink to={{pathname:'/b/content/bc?id=02', state:{isMarked: 1}}}>go to /b/b</MyNavLink>

下方输出了目标路由组件的this.props,在location属性中我们可以看到,url中的search部分并没有被识别为search属性,而是作为pathname的一部分,因此用解析search的方法进行属性提取。
在这里插入图片描述

解决方案

使用对象形式定义to属性时,可以添加query属性,如下代码所示

<MyNavLink to={{pathname:'/b/content/bc', query: {id: '02'}, state:{isMarked: 1}}}>go to /b/b</MyNavLink>

此时,location属性中就出现了query属性,其中存放着我们需要传递的数据
在这里插入图片描述

总结

个人认为,由于state与params、search的最大区别就在于可见性,state可以不将数据传递暴露于url中,因此开发中大概率不会混用state与params、search,因此React Router没有设计同时传递search和state的逻辑。另一方面,query是数据不暴露在url中的search,因此同时使用query与state更符合统一的设计逻辑。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值