Vuex和redux是一个状态管理模式,它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。
Vuex 和单纯的全局对象有以下两点不同:
1、Vuex 的状态存储是响应式的。当 Vue 组件从 store 中读取状态的时候,若 store 中的状态发生变化,那么相应的组件也会相应地得到高效更新。
2、你不能直接改变 store 中的状态。改变 store 中的状态的唯一途径就是显式地提交 (commit) mutation。这样使得我们可以方便地跟踪每一个状态的变化,从而让我们能够实现一些工具帮助我们更好地了解我们的应用。

vuex中,有默认的五种基本的对象:
1、state:存储状态(变量)->子组件能通过 this.$store.state.name 访问到state里面的属性;mapState 辅助函数;store.state 来获取状态对象,以及通过 store.commit 方法触发状态变更。
2、getters:是一个对store中的state做处理的公共方法,getter 的返回值会根据它的依赖被缓存起来,且只有当它的依赖值发生了改变才会被重新计算。对数据获取之前的再次编译,可以理解为state的计算属性。我们在组件中使用 $sotre.getters.fun()
通过属性访问:Getter 会暴露为 store.getters 对象,你可以以属性的形式访问这些值:store.getters.doneTodos ;mapGetters 辅助函数仅仅是将 store 中的 getter 映射到局部计算属性
3、mutations:修改状态,mutation 必须是同步函数。在组件中使用$store.commit('',params)。这个和我们组件中的自定义事件类似。
4、actions:异步操作。在组件中使用是$store.dispath(''),mapActions 辅助函数将组件的 methods 映射为 store.dispatch 调用
const store = new Vuex.Store({
state: {
count: 0
},
mutations: {
increment (state) {
state.count++
}
},
actions: {
increment (context) {
context.commit('increment')
}
}
})
store.dispatch('increment');//Action 通过 store.dispatch 方法触发
//action 内部执行异步操作:
actions: {
incrementAsync ({ commit }) {
setTimeout(() => {
commit('increment')
}, 1000)
}
}
5、modules:store的子模块,为了开发大型项目,方便状态管理而使用的。这里我们就不解释了,用起来和上面的一样。
例如
const moduleA = {
state: { ... },
mutations: { ... },
actions: { ... },
getters: { ... }
}
const moduleB = {
state: { ... },
mutations: { ... },
actions: { ... }
}
const store = new Vuex.Store({
modules: {
a: moduleA,
b: moduleB
}
})
store.state.a // -> moduleA 的状态
store.state.b // -> moduleB 的状态
Vuex 是一种状态管理模式,用于集中管理Vue应用中的组件状态。与全局对象不同,Vuex的状态变化是响应式的,状态改变必须通过提交mutation进行。Vuex包括state、getters、mutations、actions和modules五个核心部分,分别处理状态、计算属性、同步状态改变、异步操作和模块化状态管理。组件可以通过store访问和更新状态,利用辅助函数如mapState、mapGetters、mapActions简化绑定。

1401

被折叠的 条评论
为什么被折叠?



