您好,登錄后才能下訂單哦!
這篇文章主要介紹“怎么使用Vuex模塊化實(shí)現(xiàn)待辦事項(xiàng)的狀態(tài)管理”的相關(guān)知識(shí),小編通過(guò)實(shí)際案例向大家展示操作過(guò)程,操作方法簡(jiǎn)單快捷,實(shí)用性強(qiáng),希望這篇“怎么使用Vuex模塊化實(shí)現(xiàn)待辦事項(xiàng)的狀態(tài)管理”文章能幫助大家解決問(wèn)題。
效果:
待辦事項(xiàng)中的一個(gè)事件,它可能擁有幾個(gè)狀態(tài),未完成、已完成、已取消或被刪除等。這個(gè)事件需要在這多種狀態(tài)之間切換,那么使用vuex來(lái)管理也是非常方便的。
來(lái)看一下vuex怎么完成狀態(tài)管理的:
所有組件都是調(diào)用actions,分發(fā)mutation去修改state,然后state經(jīng)過(guò)getter又更新到各個(gè)組件里。state又通過(guò)localStorage存儲(chǔ)數(shù)據(jù)到本地,下次重新打開(kāi)時(shí)再讀取保存的數(shù)據(jù)。
模塊化
為什么要用模塊化?當(dāng)我們的項(xiàng)目比較大,組件很多,功能也多,會(huì)導(dǎo)致state里要存放很多內(nèi)容,整個(gè) store 都會(huì)很龐大,很難管理。
我模塊化的store目錄如下:
|-store/ // 存放vuex代碼 | |-eventModule // 事件模塊 | | |-actions.js | | |-getters.js | | |-index.js | | |-mutations.js | | |-state.js | |-themeModule // 主題顏色模塊 | | |-actions.js | | |-getters.js | | |-index.js | | |-mutations.js | | |-state.js | |-index.js // vuex的核心,創(chuàng)建一個(gè)store
可以看到,每個(gè)模塊擁有自己的state、mutation、action、getter,這樣子我們就可以把我們的項(xiàng)目根據(jù)功能劃分為多個(gè)模塊去使用vuex了,而且后期維護(hù)也不會(huì)一臉懵逼。
狀態(tài)管理
接下來(lái),我們來(lái)看看vuex完成狀態(tài)管理的一個(gè)流程。
舉個(gè)栗子:一個(gè)待辦事項(xiàng),勾選之后,會(huì)在未完成列表里移除,并在已完成的列表里出現(xiàn)。這個(gè)過(guò)程,是這個(gè)待辦事項(xiàng)的狀態(tài)發(fā)生了改變。勾選的時(shí)候,是執(zhí)行了一個(gè)方法,那我們就先寫(xiě)這個(gè)方法。在 event_list.vue 文件里新建一個(gè)moveToDone方法。
methods: { moveToDone(id){ //移至已完成 this.$store.dispatch('eventdone', id); } }
在 moveToDone 方法中通過(guò) store.dispatch 方法觸發(fā) action, 接下來(lái)我們?cè)?eventModule/actions.js 中來(lái)注冊(cè)這個(gè) action, 接受一個(gè) id 的參數(shù)。
module.exports = { eventdone = ({ commit }, param) =>{ commit('EVENTDONE',{id: param}); } }
action 通過(guò)調(diào)用 store.commit 提交載荷(也就是{id: param}這個(gè)對(duì)象)到名為'EVENTDONE'的 mutation,那我們?cè)賮?lái)注冊(cè)這個(gè) mutation
module.exports = { EVENTDONE(states,obj){ for (let i = 0; i < states.event.length; i++) { if (states.event[i].id === obj.id) { states.event[i].type = 2; states.event[i].time = getDate(); var item = states.event[i]; states.event.splice(i, 1); // 把該事件在數(shù)組中刪除 break; } } states.event.unshift(item); // 把該事件存到數(shù)組的第一個(gè)元素 local.set(states); // 將整個(gè)狀態(tài)存到本地 } }
通過(guò) mutation 去修改 state, state里我們存放了一個(gè) event 屬性
const state = { event: [] }; export default state;
在組件中要獲得這個(gè) state 里的 event, 那就需要寫(xiě)個(gè)getters
const getters = { getDone(states){ return states.event.filter(function (d) { if (d.type === 2) { // type == 2表示已完成 return d; // 返回已完成的事件 } }); } }; export default getters;
然后每個(gè)module里都有一個(gè)index.js文件,把自己的state、mutation、action、getters都集合起來(lái),就是一個(gè)module
import * as func from '../function'; import * as actions from './actions.js'; import * as mutations from './mutations.js'; import state from './state.js'; import getters from './getters.js'; module.exports = { state, getters, actions, mutations }
在 store/index.js 里創(chuàng)建一個(gè) store 對(duì)象來(lái)存放這個(gè)module
import Vue from 'vue'; import Vuex from 'vuex'; import event from './eventModule'; Vue.use(Vuex); module.exports = new Vuex.Store({ modules: { event } });
最后在 event_list.vue 組件上,我們通過(guò)計(jì)算屬性 computed 來(lái)獲取到這個(gè)從未完成的狀態(tài)改變到已完成的狀態(tài),我們要用到 store 這個(gè)對(duì)象里的getters
computed: { getDone(){ return this.$store.getters.getDone; } }
這樣子,完成了 '未完成' => '已完成' 從提交修改到更新視圖讀取的整個(gè)流程,也是 vuex 工作的整個(gè)流程。通過(guò) module 的封裝,更加方便多模塊項(xiàng)目的開(kāi)發(fā)和維護(hù)。
關(guān)于“怎么使用Vuex模塊化實(shí)現(xiàn)待辦事項(xiàng)的狀態(tài)管理”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí),可以關(guān)注億速云行業(yè)資訊頻道,小編每天都會(huì)為大家更新不同的知識(shí)點(diǎn)。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。