使用vuex统一管理状态的好处:
-
能够在vuex中集中管理共享的数据,易于开发和后期维护;
-
能够高效地实现组件之间的数据共享,提高开发效率;
-
存储在vuex中的数据都是响应式的,能够实时保持数据与页面的同步。
Vuex的基本使用
1.安装vuex依赖包
npm install vuex --save
(–save与–save-dev的区别:
–save会把依赖包添加到package.json文件dependencies(上线运行时的依赖)下
–save-dev会把依赖包添加到package.json文件deDependencies(产品开发时的依赖)下
2.导入vuex包
import Vuex from ‘vuex’
Vue.use(Vuex)
3.创建store对象
const store=new Vuex.Store({
//state中存放的就是全局共享的数据
state:{count:0}
4.将store对象挂载到vue实例中
new Vue({
el:’#app’,
render:h=>h(app),
router,
store
})
Vuex的核心概念 -
State
State提供唯一的公共数据源,所有共享的数据都要统一放到Store的state中进行存储
//创建store数据源,提供唯一公共数据
const store=new Vuex.Store({
state:{count:0}
})
组件访问State中数据的第一种方式:
this.$store.state.全局数据名称
(在template内this可以不写)
组件访问State中数据的第二种方式:
1.从vuex中按需导入mapState函数
import {mapState} from ‘vuex’
2.通过mapState函数将当前组件需要的全局数据,映射为当前组件的computed计算属性:
computed:{
…mapState(['count])
} -
Mutation
// Mutation用于变更Store中的数据
1.只能通过mutation变更Store数据
2.可以集中监控所有数据的变化
mutations:{
add(state){
//变更状态
state.count++
}
}
//触发mutation
methods:{
handle(){
//触发mutations的第一种方式
this. 美元符号store.commit(‘add’)
}
}
//可以在触发mutations时传递参数:
mutations:{
addN(state,step){
state.count+=step
}
}
//触发mutation
methods:{
handle(){
//触发mutations时携带参数
this.$store.commit(‘addN’,3)
}
}
触发mutations的第二种方式:
1.从vuex中按需导入mapMutations函数
import {mapMutations} from ‘vuex’
2.通过刚才导入的mapMutations函数,将需要的mutations函数,映射为当前组件的methods方法:
methods:{
…mapMutations{[‘add’.‘addN’]}
} -
Action
Action用于处理异步任务
如果通过异步操作变更数据,必须通过Action,在Action中还是要通过触发Mutation的方式间接变更数据
actions:{
addAsync(context){
setTimeout(()=>{
context.commit(‘add’)
},1000)
}
}
//触发Action
methods:{
handle(){
//触发actions的第一种方式
this.$store.dispatch(‘addAsync’)
}
}
-
Getter
github链接:https://github.com/xu-wzc/vuex-
b站视频教程:
Vuex从入门到实战:https://www.bilibili.com/video/BV1h7411N7bg