Vuex基本使用
前言
在使用Vue.js
制作项目时,有时发现一些变量和参数需要在多个组件之间进行使用,且组件A
中该参数的改变需要同时使组件B
发生相应更新;因此就需要在这些组件能够共同访问的地方定义公共参数。
之前使用过一个『不太好』的方法,就是直接在Vue
对象(准确来说相当于Vue class
)的prototype
上添加需要使用的公共变量,因此所有Vue
实例(包括组件,因为组件实际上也是Vue
实例?)都可以继承并访问到这个属性,也就可以在多个组件间进行使用。然而这里实际上有个『坑』,理解原型链就能知道,对Vue
实例的属性进行改变并不会影响到Vue
的prototype
同名属性,自然也就无法对其他组件进行及时更新;这么做也无法使用Vue
本身的数据依赖机制,但是如果那个公共属性是常量的话完全可以使用上述方法。
Vuex
Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。Vuex 也集成到 Vue 的官方调试工具 devtools extension,提供了诸如零配置的 time-travel 调试、状态快照导入导出等高级调试功能。
简言之,Vuex
就是用来在Vue
中管理组件状态的官方工具。
基本概念
State
相当于Vue
实例或组件中的data
属性,在组件中可以通过this.$store.state
来访问获取相应的state
属性;
Getter
相当于Vue
实例或组件中的computed
属性,定义一个方法来对某一个或多个state
进行处理,并返回相应的值,因此该方法依赖于用到的state
属性,只要依赖的state
属性没有发生改变,该getters
的值就不会发生改变;在组件中可以通过this.$store.getters
来访问获取相应的getters
属性;
Mutation
为了方便进行管理数据依赖,并不能直接对store
里的state
进行直接更改,唯一的方法就是使用mutations
里注册的方法进行相应更改;因此mutations
就相当于Vue
实例或组件中的methods
属性,并且类似于组件中的自定义事件,需要使用的时候要『触发』相应的方法,即在组件中要使用this.$store.commit('type', payload)
,其中type
就是mutations
中定义的方法名,prelaod
就是需要传给该方法的参数。需要注意的是在mutations
中的方法必须是同步的,即不能有异步回调!!!
Action
跟mutations
类似,actions
也相当于Vue
实例或组件中的methods
属性;但是actions
里的方法一般都是执行异步回调操作,并在回调完成后执行commit
操作来『触发』mutations
中的方法。在组件中可以使用this.$store.dispatch('type', payload)
来『触发』相应的actions
方法。
响应式获取状态
在组件中如果要响应式地依赖状态值,那么最好在computed
属性中返回一个状态,这样状态一旦改变,这边的值也会相应的更新。如:
1 | export default { |