vue3中的vuex理解

vuex,概念理论什么的,我就不多说了。懂的人都懂。不懂的,请自己谷歌。本博文主要讲解它的一些常用方法和持数据的持久化(本文是以模块化来写的)。
1、安装

npm install vuex@next --save
npm i vuex-persistedstate #持久化插件

2、在根目录下新建一个store目录,再在该目录下新建一个index.ts文件(做为vuex的入口文件)

import { createStore } from 'vuex'
import createPersistedState from 'vuex-persistedstate'

import user from './user' //user模块
import goods from './goods' //goods模块
//.....
//你需要哪些模块就引入哪些模块(并在对应的目录建立相应的文件)

export default createStore({
    modules:{
        user,
        goods
    },
    plugins:[ //这个是插件,
        createPersistedState({
            storage: window.sessionStorage,
            key: 'vuex',
            paths:['user' , 'goods']
        })
    ]
})

2、以user.ts模块为例

export default {
    namespaced:true,
    state:{
        count:10,
        name:'xiaobing',
        users:[
            {id:1, name:'xiaobing' , sex:1},
            {id:2 , name:'bingningcao' , sex:2},
            {id:3, name:'bingning' , sex:1}
        ]
    },
    mutations:{
        setCount(state , payload){
            state.count = state.count + payload
        }
    },
    actions:{
        setActionsCount(context , params){
            context.commit('setCount' , params)
        }
    },
    getters:{
        getUserSexas1(state){
            return (sex)=>{
                return state.users.filter(item=>{
                    return item.sex == sex
                })
            }
        }
    },
}

3、在组件/页面上使用

<template>
    <div class="container">
        {{ getUserSexas1(2) }}
        <div>{{ store.state.user.count }}</div>

        <div><button @click="setCount(100)">btn</button></div>
    </div>    
</template>

<script lang="ts" setup>
    import { computed } from 'vue';
    import { useStore , mapState } from 'vuex'; 
    let store = useStore();

    // const getUserSexas1 = computed(()=>(sex)=>{
    //     return store.getters['user/getUserSexas1'](sex)
    // })
    
    const getUserSexas1 = computed(()=>{
        return (sex)=>{
            return store.getters['user/getUserSexas1'](sex)
        }
    })


    function setCount(val){
        store.commit('user/setCount' , val); //只是做为提交(**Mutation**)
        let r = store.state.user.count
        console.log(r)
    }
	//实际中,我们是不应该直接提交(**Mutation**)里面的,只是通过(**Action**)去分发。
	//分发,对应user.js 中 action 里的  **setActionsCount**
	
	function setActionsCount(params){
		//对应user.js 中 action 里的
        store.dispatch('user/setActionsCount' , params) 
    }
</script>
  • 11
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值