Vuex modules模式下mapState/mapMutations的操作實例
更新時間:2019年10月17日 08:23:18 作者:big_cat
這篇文章主要介紹了Vuex modules 模式下 mapState/mapMutations 的操作實例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
當我們使用 Vuex 實現(xiàn)全局狀態(tài)維護時,可能需要將狀態(tài)值劃分多個模塊,比如一些 root 級的用戶登錄狀態(tài),token,用戶級的用戶信息,購物車級的購物車信息。
下面我們實例演示下如何在多模塊下使用 mapState/mapMutations。
- modules 只作用于屬性,屬性會歸屬在相應(yīng)的模塊名的命名空間下。
- mutations, actions, getter 沒有命名空間的限定,所以要保證全局的唯一性,否則后者會覆蓋前者
store/index.js
import Vue from 'vue'
import Vuex from 'vuex'
import user from './user'
import order from './order'
Vue.use(Vuex)
const store = new Vuex.Store({
modules: {
user,
order
},
state: {
hasLogin: false,
token: ""
},
mutations: {
setHasLogin(state, hasLogin) {
state.hasLogin = hasLogin
},
setToken(state, token) {
state.token = token
}
}
})
export default store
store/user.js
const state = {
name: "sqrtcat",
age: 25
}
const mutations = {
setUserName(state, name) {
state.name = name
},
setUserAge(state, age) {
state.age = age
}
}
const actions = {
}
const getters = {
}
export default {
state,
mutations,
actions,
getters
}
store/order.js
const state = {
name: "cart",
count: 0
}
const mutations = {
setOrderName(state, name) {
state.name = name
},
setOrderCount(state, count) {
state.count = count
}
}
const actions = {
}
const getters = {
}
export default {
state,
mutations,
actions,
getters
}
Vue 引入
import Vue from 'vue'
import App from './App'
import store from './store'
Vue.config.productionTip = false
Vue.prototype.$store = store // 注入倉庫
const app = new Vue({
store// 注入倉庫
})
app.$mount()
index.vue
<template>
<view>
<button class="primary" @click="setUserName('big_cat')">setUserName</button>
<button class="primary" @click="setUserAge(27)">setUserAge</button>
<button class="primary" @click="setOrderName('yes')">setOrderName</button>
<button class="primary" @click="setHasLogin(true)">setHasLogin</button>
<button class="primary" @click="setToken('tokentokentokentoken')">setToken</button>
<view class="">
{{userName}}
</view>
<view>{{userAge}}</view>
<view>{{orderName}}</view>
<view>{{hasLogin}}</view>
<view>{{token}}</view>
</view>
</template>
<script>
import {
mapState,
mapMutations
} from "vuex"
export default {
data() {
return {}
},
computed: {
// 原生
hasLogin() {
return this.$store.state.hasLogin
},
token() {
return this.$store.state.token
}
// 倉庫root屬性 可以直接 magic 賦值
// ...mapState(["hasLogin", "token"]),
// 因為 modules 下的屬性使用了命名空間 所以不能使用數(shù)組方式的 magic
...mapState({
userName: state => state.user.name,
userAge: state => state.user.age,
orderName: state => state.order.name
}),
// 更多示例
...mapState({
hasLogin(state) {
return state.hasLogin
},
token(state) {
return state.token
}
}),
...mapState({
hasLogin: (state) => {
return state.hasLogin
},
token: (state) => {
return state.token
}
}),
},
methods: {
// vuex 在使用了 modules 模式時
// mutation依然沒有命名空間的概念 所以在定義 mutations 時要注意全局的唯一性
// 否則后者會覆蓋前者
...mapMutations(["setHasLogin", "setToken"]),
// magic style1
...mapMutations(["setUserName", "setUserAge", "setOrderName"]),
// magic style2
...mapMutations({
setUserName(commit, userName) {
commit("setUserName", userName)
},
setUserAge(commit, userAge) {
commit("setUserAge", userAge)
},
setOrderName(commit, orderName) {
commit("setOrderName", orderName)
}
}),
// 原生寫法
setUserName(userName) {
this.$store.commit("setUserName", userName)
},
setUserAge(userAge) {
this.$store.commit("setUserAge", userAge)
},
setOrderName(orderName) {
this.$store.commit("setOrderName", orderName)
}
}
}
</script>
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
您可能感興趣的文章:
- vuex中store的action和mutations用法
- vuex?mutations的兩種調(diào)用方法小結(jié)
- Vuex中的Mutations的具體使用方法
- 在Vuex使用dispatch和commit來調(diào)用mutations的區(qū)別詳解
- vuex中的 mapState,mapGetters,mapActions,mapMutations 的使用
- 詳解vuex中mapState,mapGetters,mapMutations,mapActions的作用
- Vuex中mutations與actions的區(qū)別詳解
- Vuex之理解Mutations的用法實例
- vuex mutations 同步操作方法詳解
相關(guān)文章
詳解Vue的computed(計算屬性)使用實例之TodoList
本篇文章主要介紹了詳解Vue的computed(計算屬性)使用實例之TodoList,具有一定的參考價值,有興趣的可以了解一下2017-08-08
詳解vue 配合vue-resource調(diào)用接口獲取數(shù)據(jù)
本篇文章主要介紹了vue 配合vue-resource調(diào)用接口獲取數(shù)據(jù),具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-06-06

