(五)vuex

5.1.1 vuex 是什么

  1. 概念:专门在Vue 中实现集中式状态(数据)管理的一个Vue 插件,对vue 应用中多个组件的共享状态进行集中式的管理(读/写),也是一种组件间通信的方式,且适用于任意组件间通信。
    在这里插入图片描述
    在这里插入图片描述
  2. Github 地址: https://github.com/vuejs/vuex

5.1.2 什么时候使用 Vuex

  1. 多个组件依赖于同一状态

  2. 来自不同组件的行为需要变更同一状态

5.1.3 案例

在这里插入图片描述

5.1.4 Vuex 工作原理图

在这里插入图片描述
在这里插入图片描述
注意!!!

在这里插入图片描述

5.2 vuex 核心概念和 API

5.2.1 state

  1. vuex 管理的状态对象

  2. 它应该是唯一的

  3. 示例代码:
    在这里插入图片描述

5.2.2 actions

  1. 值为一个对象,包含多个响应用户动作的回调函数

  2. 通过commit( )来触发mutation 中函数的调用, 间接更新state

  3. 如何触发actions 中的回调?

    在组件中使用: 在这里插入图片描述

  4. 可以包含异步代码(定时器, ajax 等等)

  5. 示例代码:
    在这里插入图片描述

5.2.3 mutations

  1. 值是一个对象,包含多个直接更新state 的方法

  2. 谁能调用mutations 中的方法?如何调用?
    在这里插入图片描述

  3. mutations 中方法的特点:不能写异步代码、只能单纯的操作state
    在这里插入图片描述
    基本使用

  4. 初始化数据、配置actions、配置mutations,操作文件store.js

在这里插入图片描述
在这里插入图片描述
2. 组件中读取vuex中的数据: s t o r e . s t a t e . s u m 3. 组件中修改 v u e x 中的数据: store.state.sum 3. 组件中修改vuex中的数据: store.state.sum3.组件中修改vuex中的数据:store.dispatch(‘action中的方法名’,数据)或$store.commit(‘mutations中的方法名’,数据)

备注:若没有网络强求或其他业务逻辑,组件中也可以越过actions,即不写dispatch,直接编写commit。

5.2.4 getters

  1. 值为一个对象,包含多个用于返回数据的函数

  2. 如何使用?—— $store.getters.xxx

  3. 示例代码
    在这里插入图片描述

👉getters的使用:
  1. 概念:当state中的数据需要经过加工后再使用时,可以使用getters加工

  2. 再store.js中追加getters配置在这里插入图片描述

组件中读取数据:$store.getter.bigSum
👉四个map方法的使用

  1. mapState方法用于帮助我们映射state中的数据为计算属性在这里插入图片描述
  2. mapGetters方法:用于帮助我们映射getters中的数据为计算属性
    在这里插入图片描述
  3. mapActions方法:用于帮助我们生成与actions对话的方法,即:包含$store.dispatch(xxx)的函数在这里插入图片描述4.mapMutations方法:用于帮助我们生成与mutations对话的方法,即:包$store.commit(xxx)的函数
//Count.vue
<template>
    <div>
        <h1>当前求和为:{{sum}}</h1>
        <h1>当前求和放大为:{{bigSum}}</h1>
        <h3>我在{{school}},{{subject}}</h3>
        <select v-model.number="n">
            <option value="1">1</option>
            <option value="2">2</option>
            <option value="3">3</option>
        </select>
        <button @click="increment(n)">+</button>
        <button @click="decrement(n)">-</button>
        <button @click="incrementOdd(n)">当前和为奇数再加</button>
        <button @click="incrementWait(n)">等一等再加</button>
    </div>
</template>

<script>
import {mapState,mapGetters,mapMutations,mapActions} from 'vuex'
export default {
    name:'Count',
    data(){
        return{
            n:1,//用户选择数据
        }
    },
    computed: {
        //借助mapState生成计算属性,从state中读取数据。(对象写法)
       // ...mapState({ he: 'sum', xuexiao: 'school', xueke: 'subject' }),
       //借助mapState生成计算属性,从state中读取数据。(数组写法)
        ...mapState(['sum','school','subject']),
/*  ************************************************************************************ */
        //...mapGetters({bigSum:'bigSum'})
        ...mapGetters(['bigSum'])
    },
    methods: {
        // incremnet(){
        //    this.$store.commit('JIA',this.n)
        // },
        // decrement(){
        //     this.$store.commit('JIAN', this.n)
        // },

        //借助mapMutations生成对应的方法,方法中会调用commit去联系mutations(对象法)
        ...mapMutations({ increment: 'JIA',decrement:'JIAN'}),
        //借助mapMutations生成对应的方法,方法中会调用commit去联系mutations(数组法)
        //...mapMutations(['JIA','JIAN']),
        /* ************************************************************************************* */
        // incrementOdd(){
        //        this.$store.dispatch('jiaOdd', this.n) 
        // },
        // incrementWait(){
        //         //函数体
        //  this.$store.dispatch('jiaWait', this.n)
        // }
        // 借助mapActions生成对应的方法,方法中会调用dispatch去联系actions(对象法)
        ...mapActions({ incrementOdd: 'jiaOdd', incrementWait: 'jiaWait' })
        // 借助mapActions生成对应的方法,方法中会调用dispatch去联系actions(数组法)
        //...mapActions(['jiaOdd','jiaWait' ])
    }
   
}
</script>
<style scoped>
 button{
    margin-left: 5px;
}
</style>

5.2.5 modules

  1. 包含多个module

  2. 一个module 是一个store 的配置对象

  3. 与一个组件(包含有共享数据)对应

👉 模块化+命名空间

  1. 目的:让代码更好维护,让多种数据分类更加明确。
  2. 修改store.js
    在这里插入图片描述
  3. 开启命名空间后,组件中读取state数据:在这里插入图片描述
  4. 开启命名空间后,组件中读取getters数据:在这里插入图片描述
  5. 开启命名空间后,组件中调用dispatch在这里插入图片描述
  6. 开启命名空间后,组件中调用commit 在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

释怀°Believe

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

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

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

打赏作者

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

抵扣说明:

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

余额充值