Vue学习之vuex(vue状态管理)

如果学过vue.js的话,大家一定知道在vue中各个组件之间传值的痛苦,在vue中我们可以使用vuex来保存我们需要管理的状态值,值一旦被修改,所有引用该值的地方就会自动更新,下面就简单的介绍一下vuex是如何修改状态值的:

新建一个项目,项目创建后,然后安装vuex,使用命令:npm install vuex --save(安装vuex保存到本地)。这个时候需要在src目录下新建一个目录store,在该目录下新建一个index.js文件,我们用来创建vuex实例,然后在该文件中引入vue和vuex,创建Vuex.Store实例保存到变量store中,最后使用export default导出store:

然后我们在main.js文件中引入该文件,在文件里面添加 import store from ‘./store’;,再在vue实例全局引入store对象。然后我们就可以开始编写我们的vuex业务代码了。

完成了这些基本的操作之后,下面就来一一的介绍一下vuex中的各个参数。

state

vuex中的数据源,我们需要保存的数据就保存在这里,可以在页面通过 this.$store.state来获取我们定义的数据;具体的代码如下:

export default new Vuex.Store({
    state:{
        count:1
    }
})

在组件中的引用为:

<p>{{this.$store.state.count}}</p>

 这时候会在界面中显示“1”

getters

Getter相当于vue中的computed计算属性,getter 的返回值会根据它的依赖被缓存起来,且只有当它的依赖值发生了改变才会被重新计算,这里我们可以通过定义vuex的Getter来获取,Getters 可以用于监听、state中的值的变化,返回计算后的结果。具体的操作如下:

export default new Vuex.Store({
    state:{
        count:1
    },
    getters:{
        getNewCount:function(state){
            return state.count+1
        }
    }
})

 调用的时候通过getters去调用:

<p>{{this.$store.getters.getNewCount}}</p>

mutations

数据我们在页面是获取到了,但是如果我们需要修改count值怎么办?如果需要修改store中的值唯一的方法就是提交mutation来修改,我们现在组件中添加两个按钮,一个加1,一个减1;这里我们点击按钮调用addFun(执行加的方法)和reductionFun(执行减法的方法),然后在里面直接提交mutations中的方法修改值:

export default new Vuex.Store({
    state:{
        count:1
    },
    getters:{
        getNewCount:function(state){
            return state.count+1
        }
    },
    mutations:{
        add(state){
            state.count = state.count+1
        },
        reduction(state){
            state.count = state.count-1
        }
    }
})

 调用的时候要触发相应的事件,然后在事件方法中通过commit来提交mutation来修改相应的值。

methods:{
    addFun(){
        this.$store.commit("add")
    },
    reductionFun(){
        this.$store.commit("reduction")
    }
}

actions

我们虽然达到了修改store中状态值的目的,但是,官方并不建议我们这样直接去修改store里面的值,而是让我们去提交一个actions,在actions中提交mutation再去修改状态值,接下来我们修改index.js文件,先定义actions提交mutation的函数,具体的操作如下:

export default new Vuex.Store({
    state:{
        count:1
    },
    getters:{
        getNewCount:function(state){
            return state.count+1
        }
    },
    mutations:{
        add(state){
            state.count = state.count+1
        },
        reduction(state){
            state.count = state.count-1
        }
    },
    actions:{
        addFun(context){
            context.commit("add")
        },
        reductionFun(context){
            context.commit("reduction")
        }
    }
})

 这里我们把commit提交mutations修改为使用dispatch来提交actions,这时候效果是一样的。

methods:{
    addFun(){
        this.$store.commit("add")
    },
    reductionFun(){
        this.$store.commit("reduction")
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ღ故里᭄ꦿ࿐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值