VueX的使用(笔记)

1 篇文章 0 订阅

vuex介绍

Vuex 是一个专门为Vue.js应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。

应用场景

当应用遇到多个组件共享状态的时候

vuex和本地存储的区别

vuex可以实时改变状态值的状态,而本地存储不行
vuex刷新页面后状态值会消失,而本地存储不会消失

vuex的使用

1.安装vuex

npm install vuex --save

2.src目录下新建store
在这里插入图片描述
3.在index.js引用vuex,并创建一个count初始值为1
在这里插入图片描述
4.在main.js上使用vuex
在这里插入图片描述
5.测试页面拿count值

<h1>count:{{$store.state.count}}</h1>

在这里插入图片描述

vuex核心(state)

state

vuex使用单一状态树,用一个对象包含了全部应用层级状态。
展示vuex状态,由于vuex的状态存储是响应式的,所以从store实例中获取状态最简单的方法就是在计算属性中返回某个状态:

<template>
    <div>
        <h1>{{count}}</h1>
    </div>
</template>
<script>
export default {
  computed:{
      count(){
          return this.$store.state.count
      }
  }
}
</script>

getter(类似于vue中的computed)

有时候我们想获取从store中的state中其他状态,那么getters就可以很完美解决这个问题,getters类似于vue中的computed计算属性,会根据它的依赖值发生变化的时候会被重新计算。

getters接受的第一个参数是store中的state

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

Vue.use(Vuex);

const store = new Vuex.Store({
    state:{
        count:1,
        num:2
    },
    getters:{
        numCount(state){
            return state.num + state.count
        }
    }
})

export default store;

getters会暴露为store.getters对象

this.$store.getters.numCount;   //  3

mutation(类似于vue中的metheds)

改变Vuex中的state状态的唯一方法是提交mutation。vuex中的mutation类似于事件:每个mutation都有一个字符串的事件类型和一个回调函数。这个回调函数就是我们实际进行状态更改的地方,并且它会接受第一个参数为store中的state,第二个参数为额外参数

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

Vue.use(Vuex);

const store = new Vuex.Store({
    state:{
        count:1,
        num:2
    },
    mutations:{
        addCount(state,payload){
            //变更状态
            state.count += payload.count;
        }
    }
})

export default store;

使用:

 this.$store.commit('addCount',{count:10});

注意:mutation必须是同步函数

action(类似于mutation)

action类似于mutation,不同的是:

  • action提交的是mutation,而不是直接变更状态
  • action可以包含任意异步操作

action函数接受一个于store实例具有相同方法和属性的context对象,音系可以调用context.commit提交一个mutation,同时也可以context.getters和context.state来获取getters和state

注册一个没有异步的action

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

Vue.use(Vuex);

const store = new Vuex.Store({
    state:{
        count:1,
        num:2
    },
    mutations:{
        addCount(state,payload){
            //变更状态
            state.count += payload.count;
        }
    },
    actions:{
        addCountA(context){
            context.commit('addCount',{count:5})
        }
    }
})

export default store;

注册一个有异步的action

    actions:{
        addCountA(context){
            setTimeout(()=>{
                context.commit('addCount',{count:5})
            },1000)
        }
    }

使用:

this.$store.dispatch('addCountA')

vuex的辅助函数

mapState

mapState 辅助函数帮助我们生成计算属性,顶替了this.$store.state.count

import {mapState} from 'vuex'
export default {
computed:{
      ...mapState({
          count:'count'
      }),
  },
}

mapGetters

mapGetters 辅助函数仅仅是将 store 中的 getter 映射到局部计算属性

import {mapGetters} from 'vuex';
export default {
  computed:{
      ...mapGetters({
          numCount:'numCount'
      })
  }
}

mapMutations

mapMutations 辅助函数将组件中的metheds映射为store.commit调用

import {mapMutations} from 'vuex';
export default {
  methods:{
      ...mapMutations({
          add:"addCount"
      })
  }
}

mapActions

mapActions 辅助函数将组件的metheds映射为store.dispatch调用

import {mapActions} from 'vuex';
export default {
  methods:{
      ...mapActions({
          addA:"addCountA"
      })
  }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值