Vuex详解

Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。
简单的来说就是用于一个管理数据的仓库,对于每个vue的实例来说,它们各自的数据都维护在各自的data中。遇到多个vue实例使用相同的数据的时候,那么需要在每个实例中都维护一份数据,就会造成了内存的浪费。
这时候我们就需要使用状态机了,多个vue时候将共同的数据维护在状态机内,只存储一份数据。
在使用它的时候,首先我们需要安装状态机

1.安装

如果在html中使用,你需要通过标签导入,如CDN。
导入后通过new Vuex.Store();创建出的实例必须要注入到vue的实例当中去。
如果通过npm下载,先通过npm install -S vuex或者通过脚手架直接安装,
然后通过Vue.use()将状态机注入到vue的实例当中去。

2.核心概念

state 用于存放状态的,即数据
getters 用于获取状态,从现有数据获取到新的数据,相当于vue组件中的computed
mutations 突变 同步修改state中的值
actions 动作,支持异步操作,提交突变(通过mutations改变state)

3.用法

var store = new Vuex.Store({
        state:{
            // 状态机
            a:{}//初始化a为一个对象
        },
        getters:{
            newA(state){
                //对a进行处理返回,得到想要的值
                return state.a.filter();
            }
        },
        mutations:{
            // 同步函数
            //重置a
            resetA(state,a){
                state.a = a;
            }
        },
        actions:{
            // 异步函数
            findA(context,data){
            	//在执行findA的时候可以通过data传参
                // 进行异步操作,并且将返回的结果通过赋值给a
                //context是上下文的意思,和store一样,但又不是store,通过commit()进行提交突变,改变a的值
                context.commit('resetA',a);
            }
        }
    })
        

通过上面的代码实例化好一个状态机,并且维护一个数据a,那么我们怎么在vue的实例中使用呢?
当我们将状态机注入到vue中后,我们可以通过this.$store访问到状态机。那么我们就可以在vue的实例中获取到状态机中的变量和方法了。
通常我们将拿到的变量放到vue的计算属性中,方法放到methods中去。
对于a来说,

computed:{
            a(){
                return this.$store.state.a;
            }
        },

或者你可以通过getters拿到

computed:{
            newA(){
                return this.$store.getters.newA;
            }
        },

此时在vue实例所访问的this.a就是状态机中所维护的变量a

对于查找actions中的方法来说,我们可以通过

this.$store.dispatch('findA',data);

来执行

我们还可以通过状态机的辅助函数获取
使用这种方式就会非常简单
使用辅助函数的后会完全脱离对this.$store的操作

import { mapState } from 'vuex'

computed: {
	...mapState(["a"])
    // 映射 this.a 为 store.state.a    
}

首先将mapState这个方式从vuex中解构出来,再使用它,并将结果通过…剥离出来。
如果想要重命名变量

computed: {
	...mapState({b : "a"})   
	// 映射 this.b 为 store.state.a  
}

对于getters和actions和state类似,
通过mapGetters和mapActions这两个辅助函数实现。
不同的是mapActions写在方法中即methods。
通过this.方法名直接调用,而不是通过this.$store.dispatch进行调用。

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值