VUE----状态管理器vuex

[1]安装vuex ,由于是开发环境和正式环境都需要用到,所以需要使用命令

--安装vuex
npm install vuex --save

安装完毕后,可在package.json文件的dependencies查看是否有vuex

[2]使用vuex,创建store.js文件,并将其挂载

//store.js
// 状态管理器
// 引入vuex
import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex);

// 创建vuex对象 
const store = new Vuex.Store({
  state: {

  },
  mutations: {  //

  },
  actions: {  //处理异步操作

  },
  getters: {  //类似计算属性  
  
  },
  modules: {  //模块

  }
});

//导出vuex
export default store;

挂载:

挂载到main.js
(1)导入
import store from './store/store.js'
(2)挂载
new Vue({
  el: '#app',
  router,
  store,
  components: { App },
  template: '<App/>'
})

需求:在人员登陆成功时,将人员的信息存储到状态管理器中,并且存储成功后,返回一个‘存储成功’的信息给组件。当人员信息更改时可以更改人员信息,可清空人员信息

(1)首先需要初始化人员的基本信息state

//设置状态里面的属性值 
state: {
    personInfo: {
      personId: '',
      openId: '',
      nickName: '',
      headImgUrl:'',
      provCode: '',
      cityCode: '',
      countyCode: ''
    }
  }

(2)设置人员信息和清空人员信息mutations

mutations: {
    // 设置人员信息
    setPersonInfo: (state, e = {}) => {
      state.personInfo.personId = e.personId;
      state.personInfo.openId = e.openId;
      state.personInfo.nickName = e.nickName;
      state.personInfo.headImgUrl = e.headImgUrl;
      state.personInfo.provCode = e.provCode;
      state.personInfo.cityCode = e.cityCode;
      state.personInfo.countyCode = e.countyCode;
    },
    // 清除人员信息
    clearPersonInfo: state => {
      state.personInfo.personId = '';
      state.personInfo.openId = '';
      state.personInfo.nickName = '';
      state.personInfo.headImgUrl = '';
      state.personInfo.provCode = '';
      state.personInfo.cityCode = '';
      state.personInfo.countyCode = '';
    }
  }

页面如何调用状态管理器里面mutations里面的方法呢:

methods: {
    setPersonInfo() {
      const personInfo = {}
      // 方法一: 
      this.$store.commit('setPersonInfo', personInfo);
      //  方法二:
      this.$store.commit({
        type: 'setPersonInfo', // 方法名
        personInfo        //参数....
      })
        
    }
  }

(3)如何获取人员的信息,在这里就是需要用到actions(官方推荐,如何使用到了异步处理,最好使用actions来处理)

 actions: {  //处理异步操作
    asycnSetPersonInfo: (context, payload) => { 
        // context是上下文,通过它来执行mutation里面的方法
        // payload是页面传来的参数
      // 整个asycnSetPersonInfo 返回了一个promise
      return new Promise((resolve, reject) => {
        // 异步操作之后获取到了返回值personInfo
        // 执行mutations里面的setPersonInfo方法
        context.commit('setPersonInfo', 异步操作返回的人员对象信息personInfo);
        // 回调,一般是给页面一个提示,告诉它,我这里执行完了
        resolve('人员设置完毕');
      })
    },
  }

页面调用状态管理器actions里面的异步操作:

methods: {
    setPersonInfo() {
        // 调用状态管理器里面的asycnSetPersonInfo方法,并传了两个参树
      this.$store.dispatch('asycnSetPersonInfo', {
        code,
        password
      }).then(res => {
        console.log(res);  //这里会打印:人员设置完毕     
      });
    }
  },

 

献上官方的一张图:

[1]如果不涉及异步处理,可直接在组建里使用commit来调用mutations里面定义的方法

[2]涉及到了异步处理,最好在actions里面异步,然后在actions里面再调用mutations里面的方法

[3]不要直接在组件里更改state里面的信息(虽然可以更改成功),看箭头流向

[4]devtools是一个谷歌插件,需要下载,用于监控state里面的值变化的,作用不大

值得注意的是:页面一刷新,vuex存储的内容就是丢失,所以需要根据业务要求,结合localStorage或sessionStorage来使用

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值