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

首頁 > 編程 > JavaScript > 正文

Vuex 單狀態(tài)庫與多模塊狀態(tài)庫詳解

2019-11-19 12:21:30
字體:
來源:轉載
供稿:網(wǎng)友

什么情況下使用vuex

Vuex 是一個專為 Vue.js 應用程序開發(fā)的狀態(tài)管理模式。它采用集中式存儲管理應用的所有組件的狀態(tài),如果您不打算開發(fā)大型單頁應用,使用 Vuex 可能是繁瑣冗余的。如果您需要構建是一個中大型單頁應用,您很可能會考慮如何更好地在組件外部管理狀態(tài),Vuex 將會成為自然而然的選擇。

之前在做旅游頁的時候對 Vuex 進行了簡單的了解。近期在做 Vue 項目的同時重新學習了 Vuex 。本篇博文主要總結一下 Vuex 單狀態(tài)庫和多模塊 modules 的兩類使用場景。

本篇所有代碼是基于 Vue-Cli 3.x 版本的腳手架工具進行編寫的。

vuex 單狀態(tài)庫 Demo

這是一個僅有單個 Vuex store 狀態(tài)庫的 Demo。當項目中使用一個 Vuex 狀態(tài)庫就已經(jīng)足夠的時候,可以使用這種方式。

本 Demo 使用了一個 increment 與 decrement 的 增 / 減 事件來體現(xiàn) store 數(shù)據(jù)的變化。

store.js

由于狀態(tài)庫是單一的,僅有一個 store.js 文件管理狀態(tài)庫。在該文件中一開始進行 import 的引入,然后使用 Vue.use(Vuex) 使用 Vuex,之后分別定義 state、mutations 和 actions,并通過 export default new Vuex.Store({state, mutations, actions}) 模塊化。

// store.jsimport 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 中通過 import 引入 store,并注冊到 Vue 的實例上。

import Vue from 'vue'import App from './App.vue'import store from './store'// Vue-Cli 3.xnew Vue({ render: h => h(App), router, store}).$mount('#app')// Vue-Cli 2.x// new Vue({//  el: '#app',//  router,//  store,//  components: { App },//  template: '<App/>'// })

使用 $store

在相應的組件中如下引入并在 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

關于單狀態(tài)庫的 Demo 請參考此 github

Github Demo 

vuex 多模塊狀態(tài)庫 Demo

當項目變得非常龐大,單個 store 無法滿足需求的時候,可以通過多模塊狀態(tài)庫管理多個 store,將各類狀態(tài)分類進行維護。

本 Demo 使用了 add 與 reduce 的 增 / 減 事件來體現(xiàn) store 數(shù)據(jù)的變化。

store

由于需要管理多個 store,因此在項目目錄中創(chuàng)建 store 文件夾,并創(chuàng)建 modules 文件夾用來放置各個 store文件,并使用 index.js 作為入口文件。具體結構請查看 Demo。

main.js

同樣在 main.js 中通過 import 引入 store,但這里是引入 index.js 這個入口文件。

import Vue from 'vue'import App from './App.vue'import store from './store/index'

使用 $store

除了使用方式有一定不同之外,methods 中的 mapActions 也更換了書寫方式,第一個參數(shù)是對應 store 管理的數(shù)據(jù),第二個參數(shù)是關于操作事件的數(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

關于多模塊狀態(tài)庫的 Demo 請參考此 github

Github Demo

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網(wǎng)。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 邹城市| 美姑县| 邻水| 汝阳县| 香河县| 太仓市| 昌吉市| 宁津县| 定日县| 花莲市| 金华市| 靖安县| 沂水县| 芦溪县| 江西省| 湖口县| 威宁| 沅陵县| 嘉义市| 虞城县| 丹凤县| 西林县| 军事| 苏尼特左旗| 综艺| 泰来县| 湖州市| 松阳县| 柘城县| 抚顺市| 汽车| 兰州市| 河南省| 宜兴市| 滨海县| 兰西县| 土默特右旗| 贡觉县| 清苑县| 南安市| 武鸣县|