Vuex简介
专门在Vue中实现集中式状态(数据)管理的一个Vue插件,对Vue应用中多个组件的共享状态进行集中管理(读写),也是一种组件间的通信方式。
- 应用场景
多个组件依赖于同一状态
来自不同组件的行为需要变更同一状态
Vuex工作原理
Vuex工作原理
Vuecomponents组件调用store的dispatch传两个参数动作类型和数据传入Vuex的Actions对象(如果dispatch没有发出数据,需要Actions对象调用ajax请求询问后端BackendAPI,如果有发出数据,Vuex可以跳过Actions提交给Mutations)中,调用对象中的该动作类型;
在此函数里面再调用store的commit提交Mutations对象(Devtools开发者工具交互Mutationsd对象);
调用其中的该函数,该函数有两值state和传入的数据,在该函数内操作state对象内的数据会由Mutate改写到State对象中;
Vuex重新解析组件render渲染到Vuecomponents对象中;
Actions对象,Mutations对象和State对象三者规store管理,store要定义在根组件上方便所有组件调用,一般写在
src/store/index.js
- 食客与餐馆
VueComponets食客,向Actions前台点餐,Actions前台告诉Mutations后厨做哪些菜,State菜做好,端给VueComponets食客
使用
在组件中用dispatch方法调用actions中的方法或者用commit调用mutations中的方法,在state中定义变量数组或者对象,在mutations用函数操作state,在组件中用$store.state
对象调用各级仓库中的数据
Vuex模块式开发
vue2只能使用Vuex3,vue3只能使用Vuex4使用npm i vuex@3
命令安装。
backage.json文件有vuex配置项说明安装成功
在src文件夹下创建store文件夹,在其中创建index.js在其中引入vue,vuex。使用vuex插件,引入模块化仓库,暴露一个vuex实例,在其中声明模块化仓库:
//引入Vuex -----相当于咱们最大的仓库
import Vuex from "vuex";
//引入Vue
import Vue from "vue";
//使用插件
Vue.use(Vuex);
//引入小仓库
import home from './home'
export default new Vuex.Store({
//实现Vuex仓库模块化开发存储数据
modules:{
home,
}
})
搭建模块化小仓库:定义只读对象actions,mutations,state,getter,对外声明暴露四个对象,
//state仓库存储数据的地方,
const state={
a:1
}
//actions书写业务逻辑
const actions={
}
//mutations修改state
const mutations={
}
//getters计算属性,简化仓库数据让组件获得数据更方便
const getters={
}
export default{
actions,
mutations,
state,
getters
}