您好,登錄后才能下訂單哦!
這篇文章主要介紹“Vuex的使用實例分析”的相關知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“Vuex的使用實例分析”文章能幫助大家解決問題。
Vuex 簡介
1. 概念
在 Vue 中實現集中式狀態(數據)管理的一個 Vue 插件,對 vue 應用中多個組件的共享狀態進行集中式的管理(讀/寫),也是一種組件間通信的方式,且適用于任意組件間的通信
2. 使用場景
多個組件依賴于同一狀態
來自不同組件的行為需要變更同一狀態
3. Vuex 工作原理
State 是存儲的單一狀態,是存儲的基本數據(把改變的數據給到 Vue Components)
Getters 是 store 的計算屬性,對 state 的加工,是派生出來的數據。就像 computed 計算屬性一樣,getter 返回的值會根據它的依賴被緩存起來,且只有當它的依賴值發生改變才會被重新計算
Actions 像一個裝飾器,提交 mutation,而不是直接變更狀態(actions 可以包含任何異步操作,如果有什么限制判斷條件,也是在 actions 中進行操作)
Mutations 提交更改數據,使用 store.commit 方法更改 state 存儲的狀態(在 Mutations 不做任何判斷等操作,只做數據的處理,如果不需要進行異步處理,可以直接把數據交到這里)
Module 是 store 分割的模塊,每個模塊擁有自己的 state、getters、mutations、actions
Vuex 提供了 mapState、MapGetters、MapActions、mapMutations 等輔助函數給開發在 vm 中處理的 store
這里有一個很好理解 Vuex 的方法:把 Vue Components 當作是去餐廳吃飯的顧客,Actions 就是餐廳的服務員,Mutations 是餐廳的后廚,State 是做好的菜,最后再展現給顧客。所以有什么需求找 Actions 說就可以了,Mutations 只負責做菜
4. 搭建 Vuex 環境
1)打開 VScode 的控制臺,輸入 npm i vuex 進行安裝,也可以通過 Vuex 進行下載安裝
2)創建一個 store 文件夾,且在該文件夾中創建一個 index.js 文件,文件中引入 import vuex from 'vuex',通過 Vue.use(Vuex) 就可以使用它了
3)在該 index.js 文件中配置 store,并配置暴露相關對象 export default new Vuex.Store({})
4)再在 main.js 文件中引入 store,import store from './store' (這里引入的其實是 store 文件夾下的 index.js 文件,因為默認找的就是文件夾的 index ,所以可以不寫),在 Vue 實例對象中引用,即寫上 store,這樣組件實例對象和 vm 上就都能看到 store 了
下面我們用 vuex 來寫一個案例:(最終的頁面效果如下圖所示)
前面進行選擇每次要加的數,點擊加號可往上加,點擊減號也會對應的減,當當前求和的為奇數時,后一個按鈕才有效,等一等再加,就是延遲 0.5 s 后再加
Count.vue 計算組件代碼(實現頁面的布局和調用方法)
<template>
<!-- 實現頁面的布局 -->
<div>
<h2>當前求和為:{{$store.state.sum}}</h2>
<select v-model.number="n">
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
</select>
<button @click="increment">+</button>
<button @click="decrement">-</button>
<button @click="incrementOdd">當前求和為奇數再加</button>
<button @click="incrementWait">等一等再加</button>
</div>
</template>
<script>
export default {
name:'Count',
data(){
return {
n:1, //用戶選擇的數字
}
},
methods: {
increment(){
this.$store.commit('ADD',this.n)
//通過 commit 調用 Mutations 里面的 ADD 方法
},
decrement(){
this.$store.commit('DECREASE',this.n)
//通過 commit 調用 Mutations 里面的 DECREASE 方法
},
incrementOdd(){
this.$store.dispatch('addOdd',this.n)
// 通過 dispatch 調用 actions 里面的 addOdd 方法
},
incrementWait(){
this.$store.dispatch('addWait',this.n)
// 通過 dispatch 調用 actions 里面的 addWait 方法
},
},
}
</script>
<style lang="css">
button{
margin-left: 5px
}
</style>
組件中讀取 vuex 中的數據:$store.state.sum
組件中修改 vuex 中的數據:$store.dispatch('actions中的方法名',數據) 或 $store.commit('mutations中的方法名',數據)
Store 文件夾中的 index.js 代碼(用 vuex 配置相關的函數或方法)
//該文件用于創建 Vue 中最核心的 store
import Vue from 'vue'
//引入Vuex
import Vuex from 'vuex'
// 應用 Vuex 插件
Vue.use(Vuex)
//準備 actions 用于響應組件中的動作
const actions = {
// 實現為奇數的時候才加操作
addOdd(context,value) {
if (context.state.sum % 2) {
context.commit('ADDODD',value)
}
},
// 實現等到 0.5 s 才加的操作
addWait(context, value) {
setTimeout(() => {
context.commit('ADDWAIT',value)
}, 500);
}
}
//準備 mutations 用于操作數據(state)
const mutations = {
//加操作
ADD(state,value) {
state.sum += value
},
//減操作
DECREASE(state, value) {
state.sum -= value
},
ADDODD(state, value) {
state.sum += value
},
ADDWAIT(state, value) {
state.sum += value
}
}
//準備 state 用于存儲數據
const state = {
sum: 0 //當前的和
}
//創建并暴露 store
export default new Vuex.Store({
actions,
mutations,
state
})
其中 actions 對象中的每個方法都有一個 context 和 value 形參,context 里面存放著基本你要用的所有數據,value 就是你傳進來的數據
其中 mutations 對象中的每個方法都有 state 和 value 形參,第一個里面存放有 state 中的數據,value 也是傳進來的數據
App.vue
<template>
<Count />
</template>
<script>
import Count from './components/Count.vue'
export default {
name: "App",
components: {
Count,
},
}
</script>
main.js
//引入 Vue
import Vue from 'vue'
//引入 App
import App from './App.vue'
//引入 store
import store from './store/index.js'
Vue.config.productionTip = false
const vm = new Vue({
render: h => h(App),
store, //使用 store
}).$mount('#app')
關于“Vuex的使用實例分析”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識,可以關注億速云行業資訊頻道,小編每天都會為大家更新不同的知識點。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。