VueX

使用Vuex对Vue组件中的状态进行管理,简化了组件间的通信

  • 使用new Vuex.Store创建一个store

  • store对象定义了状态和改变的方法mutations

  • 使用store的commit调用对应的mutation方法改变store的状态

  • 使用store.state.属性名,获取组件的状态

简单使用

import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex)

const store = new Vuex.Store({
  state: {
    count: 0
  },
  mutations: {
    increment (state) {
      state.count++
    }
  }
})

改变状态后,获取对应的值

可以在根组件中直接注入store,这时候在子组件中可以通过this.$store.property访问对应的stat;类似router的注入

计算属性与state属性重名时

getter可以从state属性中派生出数据

访问store.getters.doneTodos就可以访问派生数据

不仅仅可以派生出数据,还可以返回一个箭头函数,在组件中使用函数对state.数据进行操作

更改state的状态

更改state的唯一办法就是提交mutation,其中更改状态类似于一个事件,使用commit函数更像是触发对应的更改事件;在提交mutation时,还可以给事件传递载荷,参数把;不过在申明的时候就要告诉mutation。

使用常量代替mutation中的事件名字

在大型项目中非常实用,尤其是多人协作的项目里

action与mutation

action有利于参数解构,简化代码

使用state.dispatch出发对应的action;并且action支持异步操作而mutation不支持异步操作

store.dispatch 可以处理被触发的 action 的处理函数返回的 Promise,并且 store.dispatch 仍旧返回 Promise:

module解决单一状态树问题

当项目变得庞大时,store对象就可能变得十分臃肿;为了解决这个问题Vuex运行我们将store分隔单个模块

而子模块内部中mutation、gettter函数接收的第一个参数就是子模快store对象,第三个参数则是根节点的store对象;类似路由的嵌套

动态的注册模块

Last updated

Was this helpful?