vuex语法糖

vuex语法糖

一:全局使用的vuex变量

1.文件位置
请添加图片描述

2.文件内容代码
第一块:service下的store下的modules下的user.js

const user = {
  state: {
    userId: '123456789',
    userName: ''
  },
  mutations: {
    SET_USER_ID(state, userId) {
      state.userId = userId
    }
  },
  actions: {
    setUserId({ commit, state }, userId) {
      commit('SET_USER_ID', userId)
    }
  }

}

export default user

第二块:service下的store下的combindModules.js

/**
 * 通过 webpack  require.context 来动态载入vuex store
 * modules目录中的文件名称必须和导出对象名称保持一致
 */
const requireModule = require.context('./modules/', false, /\.js$/)

let modules = {}

requireModule.keys().forEach(fileName => {
  const moduleName = fileName.replace(/(\.\/|\.js)/g, '')
  modules[moduleName] = requireModule(fileName).default
})

export default modules

第三块:service下的store下的getters.js

const getters = {
  // 用户
  userId: state => state.user.userId,
}

export default getters

第四块:plugins下的store.js

import Vue from 'vue'
import Vuex from 'vuex'
// combined modules
import modules from '../service/store/combindModules'
import getters from '../service/store/getters'

Vue.use(Vuex)

export default new Vuex.Store({
  modules,
  getters
})

第五块:vue项目的main.js 将store挂载到vue

import Vue from 'vue'
import App from './App.vue'
import router from './router'
import store from './plugins/store'


Vue.config.productionTip = false

new Vue({
  router,
  store,
  render: h => h(App)
}).$mount('#app')

3.如何使用这些变量

<script>
import { mapGetters, mapActions, mapMutations } from "vuex";
export default {
  data() {
    return {};
  },
  computed: {
    ...mapGetters(["userId"]),
  },
  watch: {
    userId(userId) {
      console.log("监听userID", userId);
    },
  },
  mounted() {
    console.log("about mounted", this.userId);// 使用mapGetters语法糖,用this.userId使用这个变量
  },
  methods: {
    ...mapMutations(["SET_USER_ID"]),
    ...mapActions(["setUserId"]),
    changeUserId() {
    // 修改
      this.$store.dispatch("setUserId", "987"); // 推荐使用
      this.$store.commit("SET_USER_ID", "987");
      // 语法糖
      this.setUserId();
      this.SET_USER_ID("012");
    },
  },
};
</script>

二:注册单个模块使用的vuex变量

1.1.文件位置,TestVuex文件夹相当于单个模块
请添加图片描述
2.文件内容代码
1.store中的store.js

const DepartScreen = {
  namespaced: true,
  state: {
    screenCode: '123456',
  },
  mutations: {

    SET_SCREEN_CODE(state, code) {
      state.screenCode = code
    },

  },
  actions: {
    async setScreenCode({ commit, state }, code) {
      commit('SET_SCREEN_CODE', code)
    }
  }
}
export default DepartScreen

2.store中的index.js

import store from '../../../plugins/store' //全局vuex的store.js文件
import DepartScreen from './store'

export default {
  install() {
    store.registerModule('DepartScreen', DepartScreen)
  },
  uninstall() {
    store.unregisterModule('DepartScreen')
  }
}

3.index.vue

<script>
import DepartScreen from "./Store";
import { createNamespacedHelpers } from "vuex";
const { mapState, mapActions } = createNamespacedHelpers("DepartScreen");
export default {
  computed: {
    ...mapState(["screenCode"]),
  },
  mounted() {
    console.log("mounted  DepartScreen screenCode", this.screenCode);// 使用
  },

  created() {
    console.log("DepartScreen.install();");
    DepartScreen.install();
  },
  methods: {
    ...mapActions(["setScreenCode"]),
    change() {
      this.setScreenCode("987654321"); //修改
    },
  },
  beforeDestroy() {
    console.log("DepartScreen.uninstall();");
    DepartScreen.uninstall();
  },
  watch: {
    screenCode(val) {
      console.log("监听screenCode", val);
    },
  },
};
</script>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值