Vuex的使用

Vuex的基本使用

1.安装vuex npm i vuex@3 (版本号为3,对应vue2,版本号为4,对应vue3)

2.创建文件store文件,然后编写一个js代码 导入Vue和Vuex 准备三个对象 state{} actions{} mutations{}

创建store对象并且导出 // 引入Vue import Vue from 'vue'; // 引入vuex import Vuex from 'vuex'; // 使用插件,但是这个use要在import store之前,所以放在export之前 Vue.use(Vuex);

          // 准备actions-用于组件动作的响应
       const actions={
         // context是一个上下文对象
         // 因为这里的加和减只进行了commit操作,可以省略,commit可以在最开始进行
        jiaobb(context,value)
        {   
            // 一些算前的操作放在actions里面
            if(context.state.sum%2)
            {
                context.commit('JAN',value);
            }
            console.log('jiaobb');
            
        },
        jiawait(context,value)
        {
            setTimeout(()=>{
            context.commit('JAN',value);
            },500);
            console.log('jiawait');
        }
    };

    // 准备mutation-用于操作数据
    // 这里的数据的操作只有加和减
    const mutations={
        // 第一个参数是state对象
            JAN(state,value)
            {
            state.sum+=value;
            },
            JIAN(state,value)
            {
                state.sum-=value;
            },
    };

    // 准备state-用于存储数据
    const state={ 
        sum:0,
    };

    // 创建store,并且导出
    export default new Vuex.Store({
        actions,
        mutations,
        state,
    })

注意:1.组件读取vuex的数据:$store.state.sum

           2.组件修改vuex的数据:$store.dispatch('action中的方法ming',数据)或者                                           $store.commit('mutations里面的方法名',数据); 如果没有网络请求或者其他的业务逻辑,组件可 以越过actions,在组件里面用commit

getters配置项

1.使用场景:当state里面的数据需要加工后使用的数据可以放在这个里面,并且处理的数据比较复杂复用性也比较高

2.使用方式:

  1.在store里面配置getters,在getters里面写函数,并且编写代码

   // 创建getters配置项,里面放对state里面的数据进行操作
            const getters = {

                // bigNum是操作后的数据

            bigNum(state)

            {
                return state.sum*10;

            }
            }

    // 创建store,并且导出

    export default new Vuex.Store({

        actions,

        mutations,

        state,

        getters

    })

2.组件里面读取数据:

    {{$store.getters.bigNum}}

   3.四个map方法

   1.使用场景为了减少代码的复用,可以直接使用store里面的一些数据

  mapState()和mapGetters()

   1.mapState():帮助我们映射到state里面的数据为计算属性直接使用

         使用方法:1.借助计算属性,对象写法,得到的结果是一个对象,所有要使用...将对象展开

         参数一个对象,每个计算属性都以key val形式出现,key是计算属性的名字,val是state里面           的值

   ...mapState({school:'school',name:'name'}),

                  2.写成数组的形式,里面的数据是作为计算属性的名字和state数据是一样

 ...mapState(['school','name']),

   2.mapGetters():帮助我们映射到getters里面的数据为计算属性直接使用

  // 2.mapGetters() 和mapState一样的作用,是从getters配置项里面读取数据

        ...mapGetters({bigNum:'bigNum'}),

        // ...mapGetters(['bigNum']),

 mapMutations和mapActions

    1.mapMutations:用于生成与mutation对话的方法,即包括: this.$store.commit('JAN',this.num) 的函数
   

    ...mapMutations({add:'JAN'},{sub:'JIAN'}),//对象写法

        ...mapMutations(['add','sub])//前面和后面的一样的名字用数组的写法

   

    2.mapActions:用于生成与actions对话的方法,即包括: this.$store.dispatch('JAN',this.num) 的函数

          // mapActions

        ...mapActions({addobb:'jiaobb',addwait:'jiawait'})//对象写法

        //  ...mapActions(['jiaobb','jiawait'])//前面和后面的一样的名字用数组的写法

    调用函数的时候,要在模板绑定事件的时候传入参数,不然默认传过去的参数是event

 <button @click="add(num)">+</button>

       <button @click="sub(num)">-</button>

       <button @click="addobb(num)">为奇数的时候加</button>

       <button @click="addwait(num)">等一会再加</button>

   4.Vuex模块化

## 模块化+命名空间

1.模块化store/index.js

    将一个模块(比如登录,登录这种模块)的功能和数据的配置写在一起,然后到Store里面再进行配置

        // 与计算相关的数据和功能 
const countAbout = {

            // 需要命名空间

            namespaced:true,

            state:{

            },

            getters:{  

            },

            actions:{

            },

            mutations:{

            }

        }

      <!-- 与展示相关的内容 -->

        const showAbout = {

            namespaced:true,

            state:{

                school:'wtu',

                name:'ywx',

            }

        }


       

export default new Vuex.Store({

                //   模块化

                modules:{

                    countAbout,

                    showAbout

                }

        })

# 2.读取数据,需要加上模块的名字   

         

   //1.读取state里面的数据

    //方式一:使用map函数

    ...mapState('countAbout',{sum:'sum'})//map方法

    //方式二:直接读取

    this.$store.state.countAbout.sum;
 //2.读取getters的数据:

    //方式一:使用map函数

    ...mapGetters('countAbout',{bigNum:'bigNum'})//map方法

    //方式二:直接读取

    this.$store.getters['countAbout/bigNum']

    //3.响应actions里面的方法:

     //方式一:使用map函数

    ...mapActions('countAbout',{addobb:'jiaobb'})//map方法

    //方式二:直接调用dispatch

    this.$store.dispatch('countAbout/jian',num);

   // 4.响应mutations里面的方法

     //方式一:使用map函数

    ...mapMutations('countAbout',{add:'JAN'})//map方法

    //方式二:直接读取

    this.$store.commit('countAbout/JAN',num)

注意:要开启命名空间,不然会找不到,会报错

         还可以把同模块化的配置放在不同的js文件里面再引入

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值