浅谈vuex

vuex官网说“vuex是一个专为 Vue.js 应用程序开发的状态管理模式 + 库。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。”
既然我浅谈vuex,那我的理解就是“vue的全局变量。”我相信说到全局变量大家应该就不陌生了,一个页面在哪都能用的变量。vuex好像更牛点,它是全部页面都能用的变量。

浅谈vuex

什么情况下用

我们做大型系统,肯定有登入页面,当员工输入账号密码登入成功后,肯定需要保存员工的id、头像、权限、手机号码等等,在我们查询某些信息时,需要把员工信息带上,以便后端人员用用户信息判断从数据库获取那些信息。
我们以保存id为例,后端通过员工id查询他的账号信息、他名下员工、他某个月的业绩等等。
 

vuex的结构

import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)

export default new Vuex.Store({
    // 全局变量
    state: {
        id: '', // 员工id
    },
    // 同步操作,修改state里的信息都在这里实现
    mutations: {},
    // 异步操作获取信息
    actions: {},
    // 既然我们浅谈vuex,modules这个稍微难的就先忽略
    modules: {}
})

从上面代码注释可以看出,想要改变全局变量的值需要在mutations里操作,而mutations里不能写异步操作(不能写ajax),要用ajax获取值需要在actions里写。
 

使用vuex获取员工信息并保存

mutations: {
  // 保存id到state.id里
  set_id(state,id){
    state.id = id
  }
},
actions:{
  // Action 函数接受一个与 store 实例具有相同方法和属性的 context 对象
  get_id(context){
    // 为了更好的展示actions为异步操作,停止3秒再发起ajax请求
    setTimeout(()=>{
      // 发起ajax请求获取id
      axios.get(
        '/xxxxx/id'
      ).then((response)=>{
        // 触发mutations里的set_id函数,保存获取到的id
        // commit的第一个参数是mutations里的函数名,第二个参数是向该函数传递的数据
        context.commit('set_id',response.data)
      })
    },3000)
  }
}

从上面代码可以看出actions和mutations的区别和用法,只要记住actions是异步获取数据,mutations是用来改变state里变量值的。
 

使用vuex

使用就非常简单了
html:

// html里使用state.id变量
{{$store.state.id}}

js:

// 通过dispatch触发actions里的get_id函数
this.$store.dispatch('get_id')
// js里使用state.id变量
this.$store.state.id

使用store需要注意,刷新页面,数据就需要重新获取。想再本第缓存还是要靠cookie、localStorage和sessionStorage。

暂无评论

发送评论 编辑评论


				
上一篇
下一篇