鍍金池/ 問(wèn)答/HTML/ 多個(gè)組件如何用Vuex優(yōu)雅的共享數(shù)據(jù)?

多個(gè)組件如何用Vuex優(yōu)雅的共享數(shù)據(jù)?

多個(gè)頁(yè)面組件(.vue文件)由團(tuán)隊(duì)中不同的開發(fā)者寫的,這些頁(yè)面中都會(huì)用到一組行政區(qū)劃數(shù)據(jù),這個(gè)數(shù)據(jù)需要用Axios調(diào)用后臺(tái)接口取得,這個(gè)數(shù)據(jù)對(duì)于同一個(gè)用戶是不變的,多個(gè)頁(yè)面組件使用的應(yīng)是同一份數(shù)據(jù)。這些頁(yè)面組件訪問(wèn)順序不固定。
那么,我的問(wèn)題是,哪個(gè)頁(yè)面來(lái)負(fù)責(zé)調(diào)用axios取值,并放到store中呢?每個(gè)頁(yè)面都要調(diào)用的話,同一份數(shù)據(jù)會(huì)取多次肯定是不合理的,那是否每個(gè)頁(yè)面都要先判斷這個(gè)值是否存在,不存在則調(diào)用actions取值并放入store中,并watch這個(gè)值變化后,再getter這個(gè)值呢?感覺(jué)這個(gè)判斷邏輯很麻煩,而且還要求所有頁(yè)面都要這樣寫,在代碼風(fēng)格協(xié)調(diào)上也要花時(shí)間,能否把這些判斷邏輯封裝,頁(yè)面直接調(diào)用呢?請(qǐng)問(wèn)實(shí)踐上大家是怎么用的?
以往后端用緩存的經(jīng)驗(yàn)是,提供一個(gè)工具類和方法供調(diào)用,這個(gè)方法中封裝了取數(shù)據(jù)的代碼,先判斷緩存中是否存在,存在則返回,不存在則從數(shù)據(jù)庫(kù)獲取后放入緩存,再返回,調(diào)用方只需要調(diào)這個(gè)方法就行了,但這不是異步的實(shí)現(xiàn),不知vuex能否這樣用呢?

回答
編輯回答
抱緊我

同一個(gè)入口的話,就放最外邊的組件App.vue里唄。


還是得看你們的數(shù)據(jù)自己拿捏。沒(méi)有固定的獲取地方,只有選擇最合適的。
1、比如你的行政區(qū)劃數(shù)據(jù),這類靜態(tài)數(shù)據(jù),直接存 localStorage 就沒(méi)問(wèn)題。
2、像獲取用戶信息數(shù)據(jù),適合放根組件獲取,因?yàn)楹芏嗟胤娇赡苡玫健?br>3、又比如若干組件共享一組數(shù)據(jù),就可以把這些組件統(tǒng)一起來(lái)放在某一父組件下,然后只要在父組件獲取數(shù)據(jù)就可以了。

2017年10月8日 16:27
編輯回答
不討囍

感覺(jué)可以把會(huì)要用到共享數(shù)據(jù)的頁(yè)面路由設(shè)成一個(gè)數(shù)組,每次進(jìn)入路由的時(shí)候,判斷是不是跳轉(zhuǎn)到這個(gè)數(shù)組里面的頁(yè)面,是的話就嘗試去取getter是否有值,沒(méi)有值再去調(diào)用action

2018年8月11日 20:50