vue框架中状态管理。在main.js引入store注入。新建一个目录store 。场景有:单页应用中,组件之间的状态,音乐播放、登录状态、加入购物车等。
- // 搭建Vuex环境
-
- 1、 创建文件:srcore/index.js
-
- //引入Vue核心库
- import Vue from 'vue'
- //引入Vuex
- import Vuex from 'vuex'
- //应用Vuex插件
- Vue.use(Vuex)
-
- //准备actions对象——响应组件中用户的动作
- const actions = {}
- //准备mutations对象——修改state中的数据
- const mutations = {}
- //准备state对象——保存具体的数据
- const state = {}
-
- //创建并暴露store
- export default new Vuex.Store({
- actions,
- mutations,
- state
- })
-
- 2. 在 main.js 中创建vm时传入 store 配置项
-
- //引入store
- import store from '.ore'
- //创建vm
- new Vue({
- el:'#app',
- render: h => h(App),
- store
- })
有五种,分别是 State、 Getter、Mutation 、Action、 Module。
- 4.基本使用
-
- 1. 初始化数据、配置 actions 、配置 mutations ,操作文件 store.js
-
- //引入Vue核心库
- import Vue from 'vue'
- //引入Vuex
- import Vuex from 'vuex'
- //引用Vuex
- Vue.use(Vuex)
-
- const actions = {
- //响应组件中加的动作
- jia(context,value){
- // console.log('actions中的jia被调用了',miniStore即context,value)
- context.commit('JIA',value)
- },
- }
- const mutations = {
- //执行加
- JIA(state,value){
- // console.log('mutations中的JIA被调用了',state,value)
- state.sum += value
- }
- }
- //初始化数据
- const state = {
- sum:0
- }
- //创建并暴露store
- export default new Vuex.Store({
- actions,
- mutations,
- state,
- })
Vuex就是一个仓库,仓库里面放了很多对象。其中state就是数据源存放地,对应于一般Vue对象里面的data。
state里面存放的数据是响应式的,Vue组件从store中读取数据,若是store中的数据发生改变,依赖这个数据的组件也会发生更新。
通过mapState把全局 state 和 getters 映射到当前组件的 computed 计算属性中。
getters 可以对State进行计算操作,它就是Store的计算属性。
虽然在组件内也可以做计算属性,但是getters 可以在多组件之间复用。
如果一个状态只在一个组件内使用,可以不用getters。
Action 类似于 mutation,不同在于:Action 提交的是 mutation,而不是直接变更状态;Action 可以包含任意异步操作。
可维护性会下降,想修改数据要维护三个地方;
可读性会下降,因为一个组件里的数据,根本就看不出来是从哪来的;
增加耦合,大量的上传派发,会让耦合性大大增加,Vue用Component本意就是为了减少耦合,现在这么用,和组件化的初衷相背。