发现问题
页面使用routerRedux.push([path])进行跳转,部分页面跨页传参也是使用这种方式,然后发现了一个很奇怪的现象,部分页面接受参数后,执行两次subscriptions,所以导致两次请求。在dva的issues里面看到了2016年有人提过这个问题,并被列为bug解决了。很奇怪在这为什么复现了。
寻找原因
想知道从页面加载到请求结束到底发生了什么,这就要借助工具了----Redux devTools,是用它可以记录整个过程并进行回放,在回放里发现了原因:
图中标记的就是进入页面后发出的两次请求,对比后发现,两次的pathName有所不同,第一次里面有汉字,而第二个里面汉字被编码了。是不是因为汉字的原因呢?
验证
将URL参数里面的汉字在push前使用encodeURL转码,果然,页面只有一次请求了。
查找资料
只有字母和数字[0-9a-zA-Z]、一些特殊符号"$-_.+!*’(),"[不包括双引号]、以及某些保留字,才可以不经过编码直接用于URL。
解决问题
将所有涉及汉字的参数使用encodeURL转码,在使用时使用decodeURL转换回来。