国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

淺談vuex 閑置狀態重置方案

2024-05-06 15:22:56
字體:
來源:轉載
供稿:網友

前言

大型單頁應用(后面都是指spa),我們往往會通過使用狀態管理器 vuex 去解決組件間狀態共享與狀態傳遞等問題。這種應用少則幾十個單頁,多則上百個單頁。隨著路由的頻繁切換,每個路由對應的 vuex 中的狀態將越來越多。為了做到頁面的極致優化,我們需要將那些閑置的狀態重置,以減小占用的內存空間。

什么狀態可以重置

vuex 強調采用集中式存儲管理應用的所有組件的狀態,但是我們真把所有的狀態都放到 store 中去處理,你會發現開發起來非常痛苦。這里如果想很好的把控哪些數據需要放到 store 中去管理,首先要理解 vuex 是用來解決什么問題的。vuex 官網指出是為了解決 多個組件共享狀態 的,那么我們就可以把多個組件的共享狀態放到 store 中去管理,這里的多組件共享對于單頁應用很多情況是跨路由的組件。如果 store只存儲多組件共享的狀態,那么我們就沒必要去清理 vuex 中的狀態了,因為這些狀態隨時會被用到。

而隨著業務場景越來越復雜,很多與后臺交互的邏輯也都放到了組件中,這樣代碼就變得很凌亂,vuex 也沒有被充分利用。這時我們可以把與后臺 api 交互的邏輯放到 vuex 中的action 去處理,后臺返回的狀態自然也就放到了 store 管理。這樣處理后,組件就只負責對數據進行渲染,邏輯非常清晰。而此時,組件對應的 store 中的狀態隨著路由的切換將會越來越多,而這些狀態就需要我們手動的去清理了。

很多方案都有取舍,如果將與后臺 api 交互的數據放到組件中,就沒必要去清理了,但是代碼邏輯將變得比較亂。另外諸如 vuex 的插件vue-devtools 將無法監控到每次請求數據的變化...

什么時候去重置狀態

我們想要的效果是在路由切換的時候,把上一個路由對應的 vuex 中的狀態重置掉,但是路由和vuex 并沒有一一對應的關系,如果要做到這種效果,那么我們需要維護一個路由與vuex 模塊的對應關系,這樣會很繁瑣。不如當路由改變時去重置 vuex 中的所有狀態。

vuex 中閑置狀態如何清理

下面將結合我的github實例 去說明,這個實例創建了一個單頁應用,我們通過切換路由的時候將閑置的狀態清除。

改造路由對應組件的 module 狀態

實例中采用拆分 store 為多個 module 的方式,將路由對應的組件狀態放到對應的 module 中,多組件共享的狀態放到頂級的 store 中管理。大致如下:

// store/index.jsimport page1 from "./modules/page1.js";import page2 from "./modules/page2.js";import page3 from "./modules/page3.js";import page4 from "./modules/page4.js";import page5 from "./modules/page5.js";export default new Vuex.Store({  state,  getters,  actions,  mutations,  modules: { // 每個路由對應的 module    page1,    page2,    page3,    page4,    page5  },  plugins: __DEV__ ? [createLogger()] : [],  strict: __DEV__ ? true : false});            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 旬邑县| 纳雍县| 慈利县| 奉贤区| 闸北区| 太保市| 嵩明县| 奎屯市| 马尔康县| 长丰县| 改则县| 彭州市| 阳山县| 兴安盟| 平果县| 舞阳县| 蒙山县| 金寨县| 常山县| 克东县| 宿州市| 鹤岗市| 宜州市| 秦皇岛市| 芒康县| 民勤县| 临夏县| 广灵县| 河曲县| 灌阳县| 鹿邑县| 朝阳县| 洛南县| 高唐县| 巫山县| 桃源县| 肇源县| 高安市| 福鼎市| 玛纳斯县| 教育|