亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

 更新時(shí)間:2018年12月11日 11:12:13   作者:evenyao  
這篇文章主要介紹了Vuex 單狀態(tài)庫(kù)與多模塊狀態(tài)庫(kù)詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

什么情況下使用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

Github Demo 

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

Github Demo

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論