vuex的使用——从一个例子入手

从一个例子入手浅谈vuex的使用

定义

Vuex 是一个专为 Vue.js开发的前端状态管理模式。它采用集中式存储管理应用的所有组件的状态。

特点

1.store是vuex的核心,当 Vue 组件从 store 中读取状态时,若 store 中的状态发生变化,那么相应的组件也会高效更新。
2.不能直接改变store中的状态,改变 store 中的状态的唯一途径就是显式地提交 (commit) mutation。

1.安装vuex

npm install vuex --save

2.建一个data文件夹,里面建一个user_store.js文件,data下有一个modules文件夹,其中包含了各个模块的state,目录如下图。

这里写图片描述

这里写图片描述
3.在user_store.js文件中引入vue,vuex以及axios。各个模块的state也可引入其中

import Vue from 'vue'
import Vuex from 'vuex'
import axios from 'axios'
//引入模块的state文件
import wareHouseInfo from "./modules/wareHouseInfo"


Vue.use(Vuex)
//引入模块state之后需定义,如下
const store = new Vuex.Store({
  modules : {
    wareHouseInfo,
  }
})

4.准备工作已经完毕,现在我们可以在warehouseInfo.js文件中更新我们的内容啦,请看代码。

//首先声明一个state状态
const state={
  wareHouseInfoList:[{
    id:'0',
    shopNo: "1号仓库",
    type:'A',
    name: "王婷",
    phone: "18911112222",
    local: "西藏自治区拉萨市城关区扎西街道"
  },{
    id:'1',
    shopNo: "2号仓库",
    type:'B',
    local: "西藏自治区拉萨市城关区扎西街道"
  }]
}
//获取状态信息,在接下来的组件中会用到
const getters = {
  getInfoList:state =>{
    return  state.wareHouseInfoList
  },
}
//更新状态,往wareHouseInfoList这个数组中添加一个对象
const mutations = {
  add(state, warehouse) {
    warehouse.id = state.wareHouseInfoList.length +1+"";
    state.wareHouseInfoList.push(warehouse);
  },
};
//在actions中注册事件处理函数,当这个函数被触发时,将状态提交到 mutaions中处理
const actions = {
  addWarehouse(ctx, newhouse) {
    newhouse && ctx.commit('add',newhouse);
  },
};
//所有模块在此注册后方能使用
export default {
  namespaced: true,
  state,
  getters,
  mutations,
  actions
}

5.在warehouse.vue中

 <div v-for="item in getInfoList ":key="item.id" >
        <div >{{item.shopNo}}</div>
        <div >
          <span >联系人:</span>
          <span>{{item.name}}</span>
          <span> {{item.phone}}</span>
        </div>
        <div >{{item.local}}</div>
      </div>
//引入mapGetters
import {mapGetters} from 'vuex'

 computed : {
      ...mapGetters({
      //与vuex中的getter关联,获取到getInfoList中的数值,在上面{{}}中可直接获取进行使用
       getInfoList:[`wareHouseInfo/getInfoList`] 
    })
}
//与vuex中的action相关联,将新的仓库信息添加到state中
 methods:{
       handleSave() {
       this.$store.dispatch('wareHouseInfo/addWarehouse',this.warehouse)
              }
            })
          }

6.最后在main.js中声明一下

import store from './assets/data';

更为详细的介绍请参考vuex官方文档vuex文档

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值