Vuex state的引入,取值和修改

前提:在vue的项目中,不可避免的会使用到vuex用于数据的存储,今天总结练习的内容
需求:后台管理系统左侧菜单的展开和缩进,需要存储点击按钮的状态
步骤:
在vue项目中建立store文件夹,因为要模块化状态管理,所以用到了modules,collapse.js用于放置数据存储的文件
在这里插入图片描述
首先。store/index.js中的内容:

import Vue from 'vue';
import Vuex from 'vuex';
import modules from './modules'

Vue.use(Vuex)

const store = new Vuex.Store({
  modules
})
export default store

其次,将modules文件夹中的所有文件放在 store/modules/index.js中处理

const modules = {};

// require.context : 有时需要一次性引入某个文件夹下的所有目录
const files = require.context('.', false, /\.js$/);
files.keys().forEach((key) => {
  if (key === './index.js') {
    return;
  }
  modules[key.replace(/(\.\/|\.js)/g, '')] = files(key).default;
});
export default modules;

然后是子目录collapse.js中的内容,用于放置我们的按钮状态

const state = {
  isCollapse:true //控制按钮状态字段,默认展开
}

const getters = {}
const actions = {}

const mutations = {
  // 动态改变state中的数据状态
  collapseHandle(state) {
    state.isCollapse = !state.isCollapse;
  },
}

export default {
  namespaced: true,  //用于分模块处理
  state,
  getters,
  actions,
  mutations
}

在main.js中引入:因为main中有new Vue
在这里插入图片描述

然后关于state的取值和修改
第一种,当一个组件需要获取多个状态时候,将这些状态都声明为计算属性会有些重复和冗余。为了解决这个问题,我们可以使用 mapState 辅助函数帮助我们生成计算属性
使用:

<i :class="icon" :collapse="isCollapse" @click="collapseHandle"></i> //使用
<script>
import { mapState,mapMutations  } from 'vuex';
export default {
  name: "header",
  data() {
    return {
    };
  },
  computed: {
    icon() {
      const { isCollapse } = this;
      console.log('isCollapse',isCollapse);
      return isCollapse ? "el-icon-s-fold" : "el-icon-s-unfold";
    },
    ...mapState({
      'isCollapse':state => state.collapse.isCollapse
    }),
    // ...mapState('collapse',['isCollapse']),  // collapse.js中namespaced: true
  },
  methods:{
    // 修改  // collapse.js中namespaced: true
    ...mapMutations('collapse', [
      'collapseHandle',
    ]),
  }
};
</script>

第二种,直接使用this.$store处理

<i :class="icon" :collapse="isCollapse" @click="collapse "></i> //使用
computed: {
//取值
    isCollapse () {
      return this.$store.state.collapse.isCollapse
    }

  },
  // 修改
  methods:{
    // 点击方法
    collapse () {
      this.$store.commit('collapse/collapseHandle',this.isCollapse)
    }
  }
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值