Closed lnden closed 5 years ago
刚才看了一下已经关闭的问题,发现#2766、#2688 这两个问题和我提交的问题相同
给可复现仓库。
给可复现仓库。
我给你一个比较规范的作者仓库吧,我刚才试着clone这个仓库yarn start 也会出现请求发送两次 https://github.com/umijs/umi-course/tree/master/hero
原因在于 subscriptions 里的 history listener 比 connected-react-router 里的 history listener 早注册,导致 subscriptions 中触发的 redux/dispatch 引起了下面这个代码的执行:
if (pathnameInHistory !== pathnameInStore || searchInHistory !== searchInStore || hashInHistory !== hashInStore) {
_this.inTimeTravelling = true; // Update history's location to match store's location
history.push({
pathname: pathnameInStore,
search: searchInStore,
hash: hashInStore
});
}
当轮到 connected-react-router 中的 history listener 执行时,又触发了一次 location 的修改,导致 subscriptions 中的 history listener 被重新触发了。
以前我遇到的时候是把 listeners.push(listener); 改成 listeners.unshift(listener)。不过可以把 dva/core 中的 run(_model.subscriptions, _model, app, onError); 执行顺序后置么,看起来影响很大。 @sorrycc
@dilidili 能修改 connected-react-router 解决这个问题么?我们可以 fork 一份出来。
@dilidili 能修改 connected-react-router 解决这个问题么?我们可以 fork 一份出来。
应该是可以的。可以在 connected-react-router 的 middleware 里:
var routerMiddleware = function routerMiddleware(history) {
history.listen(() => {
history._locationChangeSentry = true;
});
...
};
这样可以把所有在 history listeners 执行过程中产生的 dispatch 全部忽略掉。
这问题在最新 umi 还是出现了
上一页的请求在下一页切换时还会被执行一次 复现地址https://github.com/Hexa-gram/umi-bug
希望早点修复吧,我是在 .umirc.js 加dynamicImport:true解决的,可我不想开启这功能
有解决办法吗?我现在在迁移umi1.0的项目到2.0时也遇到了相同的问题。
遇到了同样的问题
目前我们这边的做法是将 subscriptions 中的事件挪到了 didMount 里
哎!本来不想迁移的,可是不迁移umi1.0的文档都打不开了
开启路由懒加载也可以
dva 的问题, dva@2.4.x 的没问题,现在只能暂时使用dva 2.4.x版本,问题存在很久了,期待解决
dva 的问题, dva@2.4.x 的没问题,现在只能暂时使用dva 2.4.x版本,问题存在很久了,期待解决
终于看到个能用的解决方案,感动哭
What happens?
根据 语雀 https://www.yuque.com/umijs/umi 编辑页面,发现每次切换顶部导航页面请求都会发送两次,从任意页面进入导航页“/hero“、“/item”、“/summoner” subscriptions 里面执行判断pathname==='/hero'为true两次
Mini Showcase Repository(REQUIRED)
https://alitajs.github.io/alita-course/
How To Reproduce
Steps to reproduce the behavior: 1.本地启动项目 切换导航,查看控制台的请求,每切换一次,相同请求发送两次
Expected behavior 1.切换导航正常情况下pathname === '/hero'只有一次为true,走一次请求
Context