Vuex 單狀態(tài)庫(kù)與多模塊狀態(tài)庫(kù)詳解
什么情況下使用vuex
Vuex 是一個(gè)專(zhuān)為 Vue.js 應(yīng)用程序開(kāi)發(fā)的狀態(tài)管理模式。它采用集中式存儲(chǔ)管理應(yīng)用的所有組件的狀態(tài),如果您不打算開(kāi)發(fā)大型單頁(yè)應(yīng)用,使用 Vuex 可能是繁瑣冗余的。如果您需要構(gòu)建是一個(gè)中大型單頁(yè)應(yīng)用,您很可能會(huì)考慮如何更好地在組件外部管理狀態(tài),Vuex 將會(huì)成為自然而然的選擇。
之前在做旅游頁(yè)的時(shí)候?qū)?Vuex 進(jìn)行了簡(jiǎn)單的了解。近期在做 Vue 項(xiàng)目的同時(shí)重新學(xué)習(xí)了 Vuex 。本篇博文主要總結(jié)一下 Vuex 單狀態(tài)庫(kù)和多模塊 modules 的兩類(lèi)使用場(chǎng)景。
本篇所有代碼是基于 Vue-Cli 3.x 版本的腳手架工具進(jìn)行編寫(xiě)的。
vuex 單狀態(tài)庫(kù) Demo
這是一個(gè)僅有單個(gè) Vuex store 狀態(tài)庫(kù)的 Demo。當(dāng)項(xiàng)目中使用一個(gè) Vuex 狀態(tài)庫(kù)就已經(jīng)足夠的時(shí)候,可以使用這種方式。
本 Demo 使用了一個(gè) increment 與 decrement 的 增 / 減 事件來(lái)體現(xiàn) store 數(shù)據(jù)的變化。
store.js
由于狀態(tài)庫(kù)是單一的,僅有一個(gè) store.js 文件管理狀態(tài)庫(kù)。在該文件中一開(kāi)始進(jìn)行 import 的引入,然后使用 Vue.use(Vuex) 使用 Vuex,之后分別定義 state、mutations 和 actions,并通過(guò) export default new Vuex.Store({state, mutations, actions}) 模塊化。
// store.js import Vue from 'vue' import Vuex from 'vuex' Vue.use(Vuex) const state = { count: 1 } const mutations = { increment(state) { state.count ++ }, decrement(state) { state.count -- } } const actions = { increment:({commit}) => { commit('increment') }, decrement:({commit}) => { commit('decrement') } } export default new Vuex.Store({state, mutations, actions})
main.js
在入口文件 main.js 中通過(guò) import 引入 store,并注冊(cè)到 Vue 的實(shí)例上。
import Vue from 'vue' import App from './App.vue' import store from './store' // Vue-Cli 3.x new Vue({ render: h => h(App), router, store }).$mount('#app') // Vue-Cli 2.x // new Vue({ // el: '#app', // router, // store, // components: { App }, // template: '<App/>' // })
使用 $store
在相應(yīng)的組件中如下引入并在 methods 中使用 mapActions。
<template> <div class="vuex"> Vuex 全局 Store count {{$store.state.count}} <button type="button" name="button" @click="increment">加</button> <button type="button" name="button" @click="decrement">減</button> </div> </template> <script> import { mapActions } from 'vuex' export default { methods: mapActions([ 'increment', 'decrement' ]) } </script> <style scoped> </style>
Demo
關(guān)于單狀態(tài)庫(kù)的 Demo 請(qǐng)參考此 github
vuex 多模塊狀態(tài)庫(kù) Demo
當(dāng)項(xiàng)目變得非常龐大,單個(gè) store 無(wú)法滿足需求的時(shí)候,可以通過(guò)多模塊狀態(tài)庫(kù)管理多個(gè) store,將各類(lèi)狀態(tài)分類(lèi)進(jìn)行維護(hù)。
本 Demo 使用了 add 與 reduce 的 增 / 減 事件來(lái)體現(xiàn) store 數(shù)據(jù)的變化。
store
由于需要管理多個(gè) store,因此在項(xiàng)目目錄中創(chuàng)建 store 文件夾,并創(chuàng)建 modules 文件夾用來(lái)放置各個(gè) store文件,并使用 index.js 作為入口文件。具體結(jié)構(gòu)請(qǐng)查看 Demo。
main.js
同樣在 main.js 中通過(guò) import 引入 store,但這里是引入 index.js 這個(gè)入口文件。
import Vue from 'vue' import App from './App.vue' import store from './store/index'
使用 $store
除了使用方式有一定不同之外,methods 中的 mapActions 也更換了書(shū)寫(xiě)方式,第一個(gè)參數(shù)是對(duì)應(yīng) store 管理的數(shù)據(jù),第二個(gè)參數(shù)是關(guān)于操作事件的數(shù)組。
<template lang="html"> <div class="a"> page a {{$store.state.countA.countA}} <button type="button" name="button" @click="add">增加</button> <button type="button" name="button" @click="reduce">刪減</button> </div> </template> <script> import { mapActions } from 'vuex' export default { methods: mapActions('countA',['add','reduce']) } </script> <style lang="css"> </style>
Demo
關(guān)于多模塊狀態(tài)庫(kù)的 Demo 請(qǐng)參考此 github
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
詳解關(guān)于表格合并span-method方法的補(bǔ)充(表格數(shù)據(jù)由后臺(tái)動(dòng)態(tài)返回)
這篇文章主要介紹了詳解關(guān)于表格合并span-method方法的補(bǔ)充(表格數(shù)據(jù)由后臺(tái)動(dòng)態(tài)返回) ,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-05-05Vuejs第十一篇組件之slot內(nèi)容分發(fā)實(shí)例詳解
這篇文章主要介紹了Vuejs第十一篇之slot內(nèi)容分發(fā)組件詳解的相關(guān)資料2016-09-09vue實(shí)現(xiàn)無(wú)縫輪播效果(跑馬燈)
這篇文章主要為大家詳細(xì)介紹了vue實(shí)現(xiàn)無(wú)縫輪播效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-05-05vue圖片加載失敗時(shí)用默認(rèn)圖片替換的方法
這篇文章主要給大家介紹了關(guān)于vue圖片加載失敗時(shí)用默認(rèn)圖片替換的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用vue具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-08-08vue使用lodop打印控件實(shí)現(xiàn)瀏覽器兼容打印的方法
這篇文章主要介紹了vue使用lodop打印控件實(shí)現(xiàn)瀏覽器兼容打印的方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-02-02VUE項(xiàng)目啟動(dòng)沒(méi)有問(wèn)題但代碼中script標(biāo)簽有藍(lán)色波浪線標(biāo)注
這篇文章主要給大家介紹了關(guān)于VUE項(xiàng)目啟動(dòng)沒(méi)有問(wèn)題但代碼中script標(biāo)簽有藍(lán)色波浪線標(biāo)注的相關(guān)資料,文中將遇到的問(wèn)題以及解決的方法介紹的非常詳細(xì),需要的朋友可以參考下2023-05-05vue動(dòng)態(tài)綁定v-model屬性名方式
這篇文章主要介紹了vue動(dòng)態(tài)綁定v-model屬性名方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-08-08vue 中使用 vxe-table 制作可編輯表格的使用過(guò)程
這篇文章主要介紹了vue 中使用 vxe-table 制作可編輯表格的使用過(guò)程,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-08-08