vuex

1.state

在store中定义数据,在组件中直接使用

复制代码
import Vue from 'vue';
import Vuex from 'vuex';
Vue.use(Vuex)
export default new Vuex.Store({
state:{},
getters:{},
mutations:{},
actions:{},
modules:{}
})
复制代码

目录:home.vue

复制代码
<template>
    <div>
        home{{$store.state.num}}
    </div>
</template>

<script>
    export default {

    }
</script>

<style scoped>

</style>
复制代码

目录:about.vue

复制代码
<template>
    <div>
        about{{num}}
    </div>
</template>

<script>
    export default {
        computed:{
            num(){
                return this.$store.state.num
            }
        }
    }
</script>

<style scoped>

</style>
复制代码

2.getters

将组件中统一使用的 computed都放getters里面来操作

复制代码
export default new Vuex.Store({
    // state相当于组件中的data,专门用来存放全局的数据
    state:{
        num:0
    },
    // getters相当于组件中的computed,getters是全局的,computed是组件内部使用的
    getters:{
        num(state){
            return state.num
        }
    },
    mutations:{},
    actions:{},
    modules:{}
})
复制代码

home.vue

复制代码
<template>
    <div>
        home{{$store.getters.num}}
    </div>
</template>

<script>
    export default {

    }
</script>

<style scoped>

</style>
复制代码

3.mutations

更改vuex的store中的状态的唯一方法是提交mutation

复制代码
export default new Vuex.Store({
    // state相当于组件中的data,专门用来存放全局的数据
    state:{
        num:0
    },
    // getters相当于组件中的computed,getters是全局的,computed是组件内部使用的
    getters:{
        num(state){
            return state.num
        }
    },
    // mutations相当于组件中的methods,但是不能使用异步方法(定时器,axios)
    mutations:{
        //
        add(state,playload){
            state.num+=playload?playload:1
        }
    },
    actions:{},
    modules:{}
})
复制代码

目录btn.vue

复制代码
<template>
    <div>
        <button @click="$store.commit('add',2)">按钮</button>
    </div>
</template>

<script>
    export default {
        methods:{
        //     addFn(){
        //         //调用store中的mutations里面的add方法
        //         // 传参使用payload
        //         this.$store.commit('add',2)
        //     }
        }
    }
</script>

<style scoped>

</style>
复制代码

4.actions

actions是store中专门用来处理异步的,实际修改状态值的,还是mutations

复制代码
export default new Vuex.Store({
    // state相当于组件中的data,专门用来存放全局的数据
    state: {
        num: 0
    },
    // getters相当于组件中的computed,getters是全局的,computed是组件内部使用的
    getters: {
        num(state) {
            return state.num
        }
    },
    // mutations相当于组件中的methods,但是不能使用异步方法(定时器,axios)
    mutations: {
        //
        add(state, playload) {
            state.num += playload ? playload : 1
        },
        reduce(state) {
            state.num --
        }
    },
    // actions专门用来处理异步,实际修改状态值的,依然是mutations
    actions: {
        reduceAsync(context){
            context.commit('reduce')
        }
    },
    modules: {}
})
复制代码

btn.vue

复制代码
<template>
    <div>
        <button @click="$store.commit('add',2)">按钮</button>
        <button @click="$store.dispatch('reduceAsync')">按钮</button>
    </div>
</template>

<script>
    export default {
        methods:{
        //     addFn(){
        //         //调用store中的mutations里面的add方法
        //         // 传参使用payload
        //         this.$store.commit('add',2)
        //     }
        }
    }
</script>

<style scoped>

</style>
复制代码

5.map*

mapState和mapGetters在组件中都是写在computed里面

复制代码

<template>
<div>
about{{getnum}}
     home{{num}}
  </div>
</template>
<script>
import {mapGetters} from 'vuex' import {mapState} from 'vuex' export default { computed: { ...mapState(['num']) } } export default { computed:{ ...mapGetters(['getnum']) } }
</script>
 
复制代码
mapMutationsmapActions在组件中都是写在methods里面 
复制代码
<template>
    <div>
        <button @click="add()">按钮</button>
        <button @click="reduceAsync()">按钮</button>
    </div>
</template>

<script>
    import {mapMutations,mapActions} from 'vuex'
    export default {
        methods:{
            //     addFn(){
            //         //调用store中的mutations里面的add方法
            //         // 传参使用payload
            //         this.$store.commit('add',2)
            //     }

            ...mapMutations(["add"]),
            ...mapActions(["reduceAsync"])
        }
    }
</script>

<style scoped>

</style>
复制代码

6.拆分写法

store中的所有属性,都可拆分成单独的js文件来书写

 

posted @   想学前端的小李  阅读(55)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
点击右上角即可分享
微信分享提示