refresh时,location.action为pop

afuga 发布于 2016-10-12 dva 最后更新 2018-07-26 10:25 6 浏览

setup({dispatch, history}) {
history.listen(location => {
if (location.pathname === '/doctor_my') {
dispatch({
type: 'queryInit',
payload: {
_action: location.action
}
});
}
});
}

当我尝试监听某个url时,location的action会有几种情况:
(1)当跳转到这个url,则action为PUSH,请求数据
(2)当返回到这个url,则action为POP,不请求数据
but,当刷新这个页面时,这个时候需要请求数据,此时action为POP,无法进行请求。

请问这个情况,有什么推荐的实践方式么?
表达可能不清晰,见谅。

已邀请:

inemo

赞同来自:

不判断 PUSH 和 POP,请求前判断是否已有数据呢?

taut

赞同来自:

@sorrycc 这个方式尝试过。
比如说,站内信的业务场景。
《1》每次进入站内信列表,无论是否有数据都会清除数据,并重新请求数据。
《2》点进某个站内信的详情页,返回时,不请求数据。

其中《1》无法满足。

frerum

赞同来自:

请求列表时不判断,请求详情时判断不就好了吗?

set

赞同来自:

@sorrycc 抱歉,可能我没描述清楚。
我在详细描述下,谢谢。
还是站内信的业务场景。
《1》当用户每次点到【站内信】功能时,进入【站内信列表】,则这个时候请求【站内信列表数据】,即使原来redux也存储着数据。
《2》当用户在【站内信列表】时,点进【某个站内信】,点左上角返回{history.goBack()},重新进入【站内信列表】.(** 产品功能期望,不刷新【站内信列表】{01} **)

因为此时做了location.pathname的监听,如果不判断PUSH/POP,无法实现{01}处的功能,因此,在逻辑里。我就针对PUSH/POP做了逻辑判断:PUSH时,请求数据;POP时,不请求数据{02}。
but,当
《3》用户在【站内信列表】时,刷新列表,location.action为POP,因为{02}的实现方式,则无法请求数据。

因此想,是否有比较好的实现方式???

qquasi

赞同来自:

3 是指用户刷新浏览器吗? 这时候数据肯定是空的,所以 POP 时判断下是否为空数据呢?

zamet

赞同来自:

判断action为PUSH或者数据不存在时就请求数据不就行了吗

prerum

赞同来自:

恩恩可以的。已经解决了。thx

nsit

赞同来自:

为什么refresh时,location.action为pop??