在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問(wèn)答/HTML/ Vue兩個(gè)路由下的兩個(gè)組件用同一份Vuex中的數(shù)據(jù),如何才能不重復(fù)發(fā)送http請(qǐng)

Vue兩個(gè)路由下的兩個(gè)組件用同一份Vuex中的數(shù)據(jù),如何才能不重復(fù)發(fā)送http請(qǐng)求?

小弟不才,正在學(xué)習(xí)Vue中,打算拿豆瓣的API來(lái)練練手寫(xiě)個(gè)單頁(yè)面應(yīng)用
遇到了個(gè)關(guān)于http請(qǐng)求方面的問(wèn)題。
如圖所示:
我需要在電影列表組件和展示完整電影列表的路由頁(yè)面都使用同一份用豆瓣api請(qǐng)求回來(lái)的放在vuex中的電影列表數(shù)據(jù)。
clipboard.png

我是在圖示里的組件create()時(shí)調(diào)用action來(lái)獲取數(shù)據(jù)的,在展示完整電影列表的路由頁(yè)面我也打算在需要此數(shù)據(jù)的組件create()時(shí)請(qǐng)求。但是哪一個(gè)頁(yè)面路由組件會(huì)被先創(chuàng)建(通過(guò)瀏覽器地址直接輸入的話)無(wú)法確定。
就會(huì)有一個(gè)問(wèn)題。
在打開(kāi)第一個(gè)頁(yè)面的時(shí)候快速跳轉(zhuǎn)至第二個(gè)需要同樣數(shù)據(jù)的頁(yè)面,此時(shí)第一個(gè)頁(yè)面中組件的http請(qǐng)求已經(jīng)發(fā)出但數(shù)據(jù)仍然未回來(lái),vuex中沒(méi)有數(shù)據(jù),這時(shí),我怎樣知道數(shù)據(jù)正在請(qǐng)求中,而不需要再進(jìn)行一次請(qǐng)求?

我自己想到兩個(gè)方法,但還想要各位賜教更好的方法:

  1. 把http請(qǐng)求的action調(diào)用放在包含此<router-view>的父級(jí)組件的create()中,在子組件里就不用擔(dān)心是否進(jìn)行過(guò)請(qǐng)求是。
  2. 我的http請(qǐng)求是用vue-resource來(lái)進(jìn)行的,可以進(jìn)行一次請(qǐng)求之后,把vue-resource返回的Promise用變量保存起來(lái),并在Resolved后把變量變?yōu)榧僦?,再次調(diào)用的時(shí)候看是否有保存promise再?zèng)Q定是否再次請(qǐng)求??墒侨绻麆e的地方也有類(lèi)似的問(wèn)題的話,就得寫(xiě)類(lèi)似的東西。如果要封裝的話,有些請(qǐng)求,請(qǐng)求發(fā)送的參數(shù)不同,存儲(chǔ)promise就會(huì)變得麻煩了。

所以請(qǐng)教各位是否有更好的辦法,或者說(shuō)是一個(gè)更好的業(yè)務(wù)邏輯思想來(lái)糾正我的錯(cuò)誤。

回答
編輯回答
喵小咪

在數(shù)據(jù)請(qǐng)求完成之前做個(gè)loading,不讓用戶跳轉(zhuǎn)。完成后=》有數(shù)據(jù)=》可跳轉(zhuǎn)
一次http請(qǐng)求最多3000ms吧

2018年4月10日 09:08
編輯回答
吢丕

這兩個(gè)方法也不見(jiàn)得會(huì)更好

  1. 如果不訪問(wèn)那幾個(gè)需要這數(shù)據(jù)的組件,那么這部分?jǐn)?shù)據(jù)是不是就多余的數(shù)據(jù),而如果你其他頁(yè)面有這樣的邏輯呢?是不是就很多無(wú)用數(shù)據(jù)。
  2. 那豈不是一直都是歷史數(shù)據(jù),如果我此刻真的需要新數(shù)據(jù)呢?
在打開(kāi)第一個(gè)頁(yè)面的時(shí)候快速跳轉(zhuǎn)至第二個(gè)需要同樣數(shù)據(jù)的頁(yè)面,此時(shí)第一個(gè)頁(yè)面中組件的http請(qǐng)求已經(jīng)發(fā)出但數(shù)據(jù)仍然未回來(lái),vuex中沒(méi)有數(shù)據(jù),這時(shí),我怎樣知道數(shù)據(jù)正在請(qǐng)求中,而不需要再進(jìn)行一次請(qǐng)求?

我個(gè)人的觀點(diǎn)是,這是個(gè)偽需求。首先這對(duì)服務(wù)器來(lái)說(shuō)沒(méi)什么影響,瀏覽器有同源TCP數(shù)量限制,相同請(qǐng)求還有緩存鎖,其次服務(wù)器本身一般還會(huì)做緩存,所以首先是不會(huì)對(duì)服務(wù)器產(chǎn)生壓力。而對(duì)于客戶端而言,打開(kāi)第一個(gè)頁(yè)面的時(shí)候快速跳轉(zhuǎn)至第二個(gè)需要同樣數(shù)據(jù)的頁(yè)面這種事情發(fā)生的有多頻繁?我認(rèn)為并不頻繁。發(fā)生后會(huì)有什么影響?可能就浪費(fèi)點(diǎn)流量。所以我不認(rèn)為是一個(gè)問(wèn)題,因?yàn)槟阋鉀Q此問(wèn)題,會(huì)引發(fā)更多的問(wèn)題。

其次如果你確實(shí)需要,你可以訪問(wèn)同一個(gè)Promise,不需要什么變量真假值,Promise本來(lái)就承諾了結(jié)果一定確定,就不會(huì)更改。但你需要考慮時(shí)效的問(wèn)題,避免一直訪問(wèn)歷史數(shù)據(jù)。

2018年2月6日 19:40