什么是vuex?
vuex是一个专门为vue.js设计的集中式状态管理架构,关于状态的理解就是在data中的属性需要共享给其他vue组件使用的部分。
vuex组成:state(存放的数据状态)、getters(对state中的状态进行过滤处理)、mutations(写有修改数据的逻辑)、actions(提交的是mutation,而不是直接变更状态)。
以下是各个模块的具体介绍:
state
vuex提供一个仓库,state用来存放数据源,对应于一般vue对象里面的data(还有对应于actions和mutations对应于methods)。
响应式存储:state里面存放的数据是响应式的,vue组件从store中读取数据,若是store中的数据发生改变,依赖这个数据的组件也会发生更新。
局部状态:(1)获取:在vue组件中获取数据最直接的方式是通过计算属性中获取。(2)组件仍然可以保存局部状态:可以把state放在组件自身,作为局部数据,专供此组件使用。
mapState(不是很懂??)
mapState的作用是把全局的state和getters映射到当前组件的computed计算属性中,this.$store.state。
使用方法:
import {mapState} from 'vuex'
export default{
computer:
mapState({
count:state=>state.count,
'count' //映射this.count为store.state.count
})
}
getters
在store仓库中,state用来存放数据,如果要对数据进行处理输出,可以写到计算属性中,当很多组件都需要使用处理后的数据,我们就可以把数据抽离出来共享,这就是getters存在的意义。
使用方法:在store中定义getters,第一个参数是state
const getter={style:state=>state.style}
使用方法:
computed:{
doneTodosCount(){
return this.$store.getters.doneTodosCount}
}
mutation
vuex中store数据改变的唯一方法是mutation。通俗的理解就是mutations里面装着一些改变数据方法的集合,把处理数据逻辑方法放在mutations里面,使得数据和视图分离。
使用方法:
mutations结构:每个mutation都有一个字符串类型的事件类型(type)和回调函数(handler),首先注册事件,当触发响应类型的时候调用handler(),调用type的时候需要用到store.commit()方法。
const store=new Vuex.Store({
state:{
count:1
},
mutations:{
increment(state){
state.count++}
}
})
store.commit('increment')//调用type,触发handler(state)
commit:提交可以在组件中使用this.$store.commit('xxx')提交mutation。
action
action提交的是mutation,而不是直接变更状态;action可以包含任意异步操作。它可以理解为通过将mutations里面处理数据的方法变成可异步的处理数据的方法,但还是通过mutation来操作。
使用:定义actions
const store=new Vuex.Store({
state:{
count:0
},
mutations:{
increment(state){
state.count++;
}
},
actions:{
increment(context){
context.commit('increment')
}
}
})
module
module可以让每一个模块拥有自己的state、mutation、action、getters,使得结构非常清晰,方便管理。
怎么用module?
const moduleA={
state:{...},
mutations:{...},
actions:{...},
}
const moduleB={
state:{...},
mutations:{...},
actions:{...}
}
const store=new Vuex.Store({
modules:{
a:moduleA,
b:moduleB
}
})
关于命名空间:如果想要模块具有更高的封装度和复用性,可以通过添加namespaced:true的方式使其成为带命名空间的模块。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。