vuex具体使用

vuex 持久化数据 ****

作用:解决vuex的一个痛点,就是你当使用vuex,页面中进行刷新,那么你操作之后的状态,都还原了,初始状态

1. 下载安装 : cnpm install vuex-persistedstate 持久化数据插件
2.找到store文件夹下面的index.js,在你的store实例中:
    // 与state,mutations同级
    plugins: [createPersistedState()]  //加上这个就可以了
3.当你去使用vuex中state数据时,发生改变时,他就会进行存储

vuex中都有哪几个核心

1.state      // vuex 中得全局状态,在任何组件都可以拿到
2.mutations  // vuex 中得改变状态得方法集合
3.getters    // vuex 中得计算属性
4.actions    // vuex 中得异步方法
5.moudles    // vuex 中得数据模块化

#vuex 中的state 储存的全局状态

  state:{
        count:0
    }
    想去修改state中的属性,那你需要定义一个同步方法
    mutations:{
        changeCount(state,str) {
            if(str == "+") {
                state.count++
            } else {
                state.count--
            }
            
        }
    }

##vuex中actions的使用
工作流程:
1. 想要请求数据,你可以写在actions里,请求数据

 actions:{
            cnodeAjax(context) {  // context,理解成store实例给我们提供的一些方法
                axios.get("https://cnodejs.org/api/v1/topics").then((res)=>{
                    context.commit("changeCnode",res.data.data)
                })
            }
        }
    2. 请求回来之后,调用同步方法
        context.commit("changeCnode",res.data.data)
    3. 同步方法改变状态
        // 同步state中cnodearr状态
        changeCnode(state,res) {
            state.cnodeArr = res
        }

    调用actions方法:this.$store.dispatch("actions方法名")

vuex中的getters *****

vuex中的getters,相当于vue组件中得计算属性
在store中 getters对象,就相当于 页面中计算属性
1.定义:
  getters:{
        sum(state) {
            let sum = 0
            state.arr.forEach((item)=>{
                sum += item
            })
            return sum
        }
    }
    2.在计算属性中:computed:{
        sum () {
            return this.$store.getters.sum
        }
    }

##辅助函数
##mapState:
它可以快速取到vuex中state中的某一个状态
在计算属性中:

…mapState([“number”,“count:”]) // 数组形式的

…mapState({number:“number”})

` // 对象形式的,对象的key就是你当前页面使用的全局状态名字,值就是对应得仓库中的属性
###mapMutations:
他可以快速得取到vuex中mutations中方法
在methods:

...mapMutations(["changeNumber","changeLoading"])  // 数组形式
   ...mapMutations({changeNum:"changeNuber"})         // 对象形式

的,对象的key就是你当前页面使用的方法,值就是对应得仓库中mutations的方法

mapAcitons:

    在methods:
        ...mapActions(["condeAjax"])   // 数组形式得
        ...mapActions({code:"condeAjax"})   // 对象形式得   # mapGetters:
    在计算属性中:
        ...mapGetters(["定义好得getters方法"])   // 数组形式
        ...mapGetters({"定义一个组件当前想用得名字","定义好得getters方法"})  // 对象形式

vuex 中 moudles (模块)

    就是将state 模块化
在你得store实例中
moudles:{
    catMoudle:{
        namespaced:true,   // 开启命名空间
        state:{
            cat:"波斯猫"
        },
        mutations:{
            say() {

            }
        },
        actions:{
            getFood(context) {
                setTimeout(()=>{
                    context.commit("changeEat","小鱼")
                },2000)
            }
        }
    },
    dogMoudle:{
        namespaced:true,   // 开启命名空间
        state:{
            dog:"哈士奇"
        },
        mutations:{
            say() {
                
            }
        },
        actions:{
            getFood(context) {
                setTimeout(()=>{
                    context.commit("changeEat","小鱼")
                },2000)
            }
        }
    }
}
this.$store.commit("dogMoudle/say")       // 调用带有命名空间的同步方法

this.$store.dispatch("dogMoudle/getFood") // 调用带有命名空间的异步方法

使用辅助函数,快速取到 模块化仓库中的数据
在计算属性中:
    ...mapState("模块化命名空间名字",["cat"])     // 数组形式,直接取到仓库中的变量,直接使用
    ...mapState("模块化命名空间名字",{cat:"cat"}) // 对象形式得,对象形式,你可以重新命名,然后在当前组件中,使用该名字

mapMutations:
    在methods中:
        ...mapMutations("模块化命名空间名字",["changeCat"])     // 数组形式,直接取到仓库中的变量,直接使用
        ...mapMutations("模块化命名空间名字",{catFn:"changeCat"}) // 对象形式得,对象形式,你可以重新命名,然后在当前组件中,使用该名字
    
mapActions:
    在methods中:
        ...mapAcitons("模块化命名空间名字",["getFood"])   // 数组形式,直接取到仓库中的变量,直接使用
        ...mapAcitons("模块化命名空间名字",{getFood:"getFood"}) // 对象形式得,对象形式,你可以重新命名,然后在当前组件中,使用该名字

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值