欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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 只作用于屬性,屬性會歸屬在相應的模塊名的命名空間下。
  • 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)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 如何使用vue過濾器filter

    如何使用vue過濾器filter

    這篇文章主要介紹了如何使用vue過濾器filter,對vue感興趣的同學,可以參考下
    2021-05-05
  • 基于vue中對鼠標劃過事件的處理方式詳解

    基于vue中對鼠標劃過事件的處理方式詳解

    今天小編就為大家分享一篇基于vue中對鼠標劃過事件的處理方式詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-08-08
  • 詳解Vue的computed(計算屬性)使用實例之TodoList

    詳解Vue的computed(計算屬性)使用實例之TodoList

    本篇文章主要介紹了詳解Vue的computed(計算屬性)使用實例之TodoList,具有一定的參考價值,有興趣的可以了解一下
    2017-08-08
  • vue.js封裝switch開關(guān)組件的操作

    vue.js封裝switch開關(guān)組件的操作

    這篇文章主要介紹了vue.js封裝switch開關(guān)組件的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-10-10
  • 詳解vue 配合vue-resource調(diào)用接口獲取數(shù)據(jù)

    詳解vue 配合vue-resource調(diào)用接口獲取數(shù)據(jù)

    本篇文章主要介紹了vue 配合vue-resource調(diào)用接口獲取數(shù)據(jù),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • Vue中v-for的9種使用案例總結(jié)大全

    Vue中v-for的9種使用案例總結(jié)大全

    v-for是vue的循環(huán)指令,作用是遍歷數(shù)組(對象)的每一個值,這篇文章主要給大家介紹了關(guān)于Vue中v-for的9種使用案例的相關(guān)資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2023-12-12
  • 解決vant框架做H5時踩過的坑(下拉刷新、上拉加載等)

    解決vant框架做H5時踩過的坑(下拉刷新、上拉加載等)

    這篇文章主要介紹了解決vant框架做H5時踩過的坑(下拉刷新、上拉加載等),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-11-11
  • vue模版編譯詳情

    vue模版編譯詳情

    本文的初衷是想讓更多哎學習的人知道并了解vue模版編譯,所以文中主要以階段流程為主,不會涉及過多的底層代碼邏輯,需要的朋友可以參考一下
    2021-09-09
  • 詳解Nuxt.js中使用Element-UI填坑

    詳解Nuxt.js中使用Element-UI填坑

    這篇文章主要介紹了詳解Nuxt.js中使用Element-UI填坑,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-09-09
  • vue3+TS reactive設(shè)定類型方式

    vue3+TS reactive設(shè)定類型方式

    這篇文章主要介紹了vue3+TS reactive設(shè)定類型方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-04-04

最新評論