使用dva routerRedux.push跳转页面携带参数时请求两次问题

发现问题

页面使用routerRedux.push([path])进行跳转,部分页面跨页传参也是使用这种方式,然后发现了一个很奇怪的现象,部分页面接受参数后,执行两次subscriptions,所以导致两次请求。在dva的issues里面看到了2016年有人提过这个问题,并被列为bug解决了。很奇怪在这为什么复现了。

寻找原因

想知道从页面加载到请求结束到底发生了什么,这就要借助工具了----Redux devTools,是用它可以记录整个过程并进行回放,在回放里发现了原因:
使用dva routerRedux.push跳转页面携带参数时请求两次问题_第1张图片

图中标记的就是进入页面后发出的两次请求,对比后发现,两次的pathName有所不同,第一次里面有汉字,而第二个里面汉字被编码了。是不是因为汉字的原因呢?

验证

将URL参数里面的汉字在push前使用encodeURL转码,果然,页面只有一次请求了。

查找资料

阮一峰的URL编码

只有字母和数字[0-9a-zA-Z]、一些特殊符号"$-_.+!*’(),"[不包括双引号]、以及某些保留字,才可以不经过编码直接用于URL。

解决问题

将所有涉及汉字的参数使用encodeURL转码,在使用时使用decodeURL转换回来。

你可能感兴趣的:(JavaScript)