写篇文章之必须马上精通vue——(21)Vuex状态库

268 阅读1分钟

Vuex可以可以认为是组件间传值的终极解决方案,但是Vuex远非这么简单。

Vuex本身并不是很难的技术,我通常只需要明白其他的属性和用法即可(初学)。

Vuex

Vuex是Vue的全家桶之一,官方称之为状态管理模式。数据存储于state属性中。

类似于router的注册和引入方式:

//main.js
import router from './router'
import store from './store'

new Vue({
  store,
  router,
  render: h => h(App)
}).$mount('#app')

state属性

state属性负责存储全局的状态变量,换言之全局变量,通过Vue框架实现了数据双向绑定,响应式。

//store/index.js
  state: {
    isD:false
  },

mutations属性

面试Vuex时的常考点。

mutations属性用于直接操作修改state中的数据,可以理解为set方法,类似于methods作用。mutations单词本意为变化

  mutations: {
    De(state){
      state.isD = true;
      sessionStorage.setItem('isD',state.isD)
    }
  },

mutations中的方法,默认接收一个参数state,可自定义名字,该参数为store实例中的state属性。第二参数为调用时传入的自定义参数,通常是对象形式数据整体,例如下面例子。

写好后,我们通过store实例中commit方法来执行mutations方法(提交):

this.$store.commit('De')
this.$store.commit('De',{key:123, name:"ok"})

更多特点我们在actions中进行比较说明。

actions属性

actions属性是对mutations的封装,我们在actions的方法中触发mutations里的方法,强调动作操作。

  actions: {
    Dde(context){
      context.commit('De');
      console.log('提交了mutations的方法')
    }
  },

我们发现actions方法的参数一默认就是store实例,所以我们可以在actions方法中执行commit对mutations方法进行调用。而后续的的参数同样是接收传入的自定义参数。

解构简化:

    Dde({commit}){
      commit('De');
      console.log('提交了mutations的方法')
    }

我们通过store实例上的dispatch方法执行actions方法

    this.$store.dispatch('Dde');

差异

  • mutations方法直接修改state数据,而actions方法通过提交mutations方法间接修改state数据。

  • mutations方法默认参数是state,而actions方法的默认参数为store实例。

  • mutation 必须同步执行,可以在 action 内部执行异步操作