vuex

Vuex是什么

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

vuex工作流程

1.vue组件->Dispatch派发->action
2.action->commit提交->mutation
3.mutation->change修改->state
4.state->render渲染->vue组件

组件文件:
state
action
mutation

什么情况下使用vuex

用于中大型单页面应用(登录、购物车、tab选项卡)
vuex中的状态类似于全局变量,刷新就会变成初始值;如果想保存这个值,就要结合sessionStorage和localStorage

问:sessionStrage 与vuex的区别
1.最重要的区别: vuex存储在内存,sessionStorage则以文件的方式存储在本地
2.应用场景:vuex用于组件之间的传值,sessionStorage则主要用于不同页面之间的传值。
3.永久性:当刷新页面时vuex存储的值会丢失,sessionStorage不会。

注:很多同学觉得用sessionStorage可以代替vuex,对于不变的数据确实可以,但是当两个组件共用一个数据源(对象或数组》时,如果其中一个组件改变了该数据源,希望另一个组件响应该变化时,sessionStorage无法做到,原因就是区别

计数器案列

文件结构:
在这里插入图片描述
效果截图(总数默认值为6):
在这里插入图片描述
1.在components下建立myCount.vue:

<template>
    <div>
        <button @click="add">+</button>{{count}}<button @click="sub">-</button>
    </div>
</template>

<script>
    import {mapActions} from "vuex";
    import {INCREMENT,DECREMENT} from '../store/ActionType';
    export default {
        name: "myCount",
        data(){
            return{
                count:0
            }
        },
        methods:{
            ...mapActions([INCREMENT,DECREMENT]),
            add(){
                this.count++;
                this.increment();
            },
            sub(){
                this.count--;
                this.decrement();
            }
        }

    }
</script>

<style scoped>

</style>

2.views/About.vue:

<template>
  <div class="about">
    {{count}}
<!--    组件-->
    <myCount/>
    <myCount/>
    <myCount/>
  </div>
</template>
<script>
import {mapGetters,mapActions} from 'vuex';
import myCount from "../components/myCount";
export default{
  name:'About',
  data(){
    return{
      totalCount:0
    }
  },
  components:{
    myCount
  },
  //把count方法放进mapGetters中,mapGetters为计算属性
  computed: mapGetters(['count'])
  //有多个时,前面要加上三个点
  // computed: {
  //   ...mapGetters(['count'])
  // }
}
</script>

在这里插入图片描述
3.在store下建立文件
在这里插入图片描述
actions.js:

export default {
    //提交给mutation
    increment({commit}){
        commit('add')
    },
    decrement({commit}){
        commit('sub')
    }
}

getters.js:

export default {
    //下方的函数名与state中的名字相同
    count(state){
        return state.count;
    }
}

state.js:

export default {
    count:6,
    isLogin:false
}

mutations.js:

export default {
    add(state){
        state.count++;
    },
    sub(state){
        state.count--;
    }
}

ActionType.js:

export const INCREMENT = 'increment';
export const DECREMENT = 'decrement';

4.上面5个文件对应在store/index.js中:
在这里插入图片描述

总结

1.创建store 暴露

    new Vuex.Store({
        state:{},
        actions:{},
        mutations:{},
        getters:{}
    })

2.main.js 中引入store
import 导入
store对象注入到Vue实例中

  1. 使用vuex中的状态或actions
    方法一:
    组件内,获取状态和行为
    import {mapGetters, mapActions} from ‘vuex’
    // mapGetters 写在computed
    // mapActions 写在methods

    方法二:
    this.$store.state // 获取状态

    this.$store.dispatch(‘行为名称’); // 调用行为

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值