vuex详解

官方解释

Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。Vuex 也集成到 Vue 的官方调试工具 devtools extension,提供了诸如零配置的 time-travel 调试、状态快照导入导出等高级调试功能。

Vue的核心部分(应用的核心是 store(仓库,一个容器),store包含着你的应用中大部分的状态 (state)):

1、this.$store : 我们可以通过 this.$store 在vue的组件中获取 
vuex的实例。

2、State : vuex中的数据源,我们可以通过 this.$store.state 获取
我们在vuex中声明的全局变量的值。

3、Getter: 相当于vue中的computed , 及 计算属性, 可以用于监听、
计算 state中的值的变化

4、Mutation: vuex中去操作数据的方法 (只能同步执行)

5、Action: 用来操作 Mutation 的动作 , 他不能直接去操作数据源,
但可以把mutation变为异步的

6、Module: 模块化,当你的应用足够大的时候,你可以把你的vuex分成多个
子模块

什么情况下我应该使用 Vuex?

1. 不适用:小型简单应用,用 Vuex 是繁琐冗余的,更适合使用简单的 store 模式

2. 适用于:中大型单页应用,你可能会考虑如何把组件的共享状态抽取出来,以一个全局单例模式管理,不管在哪个组件,都能获取状态/触发行为,解决问题如下:

① 多个视图使用于同一状态:

传参的方法对于多层嵌套的组件将会非常繁琐,并且对于兄弟组件间的状态传递无能为力

② 不同视图需要变更同一状态:

采用父子组件直接引用或者通过事件来变更和同步状态的多份拷贝,通常会导致无法维护的代码

vuex步骤:

1.项目创建完成之后,在src下创建store文件夹。在store文件夹下创建 index.js 作为我们生成vuex的文件

// index.js
import Vue from 'vue'; 
import Vuex from 'vuex';

// 需要注册vuex到vue中
Vue.use(Vuex);

// 使用 es6 语法把vuex的实例对象输出
export default new Vuex.Store({

})

2.在vue的初始文件中注册vuex的实例

import store from './store'

new Vue({
    ...
      store
})

3.在vuex中去注册我们前面说过的vuex的核心概念

import Vue from 'vue';
import Vuex from 'vuex';

Vue.use(Vuex);

export default new Vuex.Store({
    // 在state中去声明全局变量,可以通过 this.$store.state 访问
    state: {
        count: 0
    },
    // 在getters中声明state中变量的计算函数,缓存计算后的数据, 通过 this.$store.getters 调用
    getters: {
        // 接受state作为参数,每次 count发生变化时 , 都会被调用
        consoleCount: state => {
            console.log('the state count : ' + state.count);
        }
    },
    // 只能执行同步方法,不要去执行异步方法 通过 this.$store.commit 方法去调用
    mutations: {
        // 改变state状态的方法,不建议直接通过  
        // this.$store.state.? = ?的方式改变state中的状态
        addCount: state => {
            ++state.count;
        },
        // mutations的第一个参数即为 state对象,并且可以向mutation传入额外的参数
        addNumCount: (state, n) => {
            state.count+=n;
        },
    },
    // 借助actions的手去 执行 mutations , 通过  this.$store.dispatch 的方式调用
    // 可以用来执行异步操作,可以跟踪异步数据状态变化
    actions: {
        addCount: context => {
            // 调用 mutation
            context.commit('addCount');
        },
        addNumCount: (context, n) => {
            context.commit('addNumCount', n);
        }
    }
})

这时候我们就可以在任何一个 component中通过 this.$store.dispatch('addNumCount', 5); 或者 this.$store.dispatch('addCount'); 去触发actions操作来改变state中的值。更详细的vuex可以去看官网,vuex的官网

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值