vue脚手架中vuex的使用

发布一下 0 0

使用场景

多组件、父子组件、多层组合间状态共享,解决多层组件享用一个属性时的无限套娃行为

vue-cli中vuex的一种使用风格

  • 创建[src/store/modules]目录并创建js文件
// fileName:kpi.jsexport default {  name:'kpi',  namespaced: true,  state: {    targetFlag: false  },  mutations: {    updateTargetFlag(state, targetFlag) {      state.targetFlag = targetFlag    },  },  getters: {    targetFlag: state => state.targetFlag,  }}
  • 创建[src/store/index.js]文件(注册)
import Vue from 'vue'import Vuex from 'vuex'import cloneDeep from 'lodash/cloneDeep'import kpi from "./modules/kpi";Vue.use(Vuex)export default new Vuex.Store({  modules: {    kpi,  },  mutations: {    // 重置vuex本地储存状态    resetStore (state) {      Object.keys(state).forEach((key) => {        state[key] = cloneDeep(window.SITE_CONFIG['storeState'][key])      })    }  },  strict: process.env.NODE_ENV !== 'production'})
  • [src/main.js]中进行全局挂载
/** 只保留相关代码 **/import Vue from 'vue'import App from '@/App'import router from '@/router'                import store from '@/store'                  import cloneDeep from 'lodash/cloneDeep'// 保存整站vuex本地储存初始状态window.SITE_CONFIG['storeState'] = cloneDeep(store.state)/* eslint-disable no-new */new Vue({  el: '#app',  router,  store,  template: '<App/>',  components: {App}})

vuex组件间通讯(状态的设置与获取)

  • 利用computed计算属性触发对状态的管理
computed: {  targetFlag: {    get() {      return this.$store.state.kpi.targetFlag    },    set(val) {      this.$store.commit('kpi/updateTargetFlag', val)    }  }},/** 当给targetFlag赋值时会调用计算属性的set方法,从而实现对状态的更新 **/ this.targetFlag = (this.template && this.template.targetFlag) ? true : false

版权声明:内容来源于互联网和用户投稿 如有侵权请联系删除

本文地址:http://0561fc.cn/71012.html