vuex模块化

  • Post author:
  • Post category:vue

当项目包含多个模块,例如:登录模块,商品模块等,每个模块中都含有大量需要组件共享的状态,此时就要用到vuex的模块化管理了。

给项目安装vuex

npm install vuex –save

 等vuex安装完成,src文件夹下创建store文件夹,store文件夹下是index.js和login.js文件

//index.js
import Vue from 'vue'
import Vuex from 'vuex'
import login from './login.js'
Vue.use(Vuex)

export default new Vuex.Store({
    state:{},
    mutations:{},
    getters:{},
    actions:{},
    modules:{
        login
    }
})


//login.js

export default {
    namespaced: true,
    state:{
        users:[
            {
                id:'01',
                name:'Leo'
            },
            {
                id:'02',
                name:'Tom'
            }
        ]
    },
    mutations:{
        addUser(state,payload){
            state.users.push(payload)
        }
    },
    getters:{
        getNameById(state){
            return function(id){
                return state.users.find(user => user.id === id).name
            }
        },
        
        allName(state){
            return state.users.reduce((p,c) => p += `${c.name},`,'').repalce(/^,|,$/g,'')
        }
    },
    actions:{
        addAsyncUser({commit},payload){
            let { user, time } = payload
            setTimeout(() => {
                commit('addUser',user)
            },time)
        }
    }
}

在login.vue中使用

<template>
    <div>
        <span>当前用户:{{ name }}</span><br/>
        <span>所有用户:{{ $store.getters['login/allName'] }}</span>
        <span>id为02的用户:{{ name02 }}</span>
        <span>所有用户:</span>
        <ul>
            <li v-for="item in users" :key="item.id">{{ item.name }}</li>
        </ul>
        <button @click="getNameById">根据id获取用户</button>
        <button @click="addUser">添加用户</button>
        <button @click="addAsyncUser">异步添加用户</button>
    </div>
</template>
<script>
import { mapState } from 'vuex'
import { nanoid } from 'nanoid'
export default{
    data(){
        return {
            name02:""
        }
    },
    computed:{
        ...mapState({
            name:state => state.login.users[0].name,
            users:state => state.login.users
        })
    },
    methods:{
        getNameById(){
            this.name02 = this.$store.getters['login/getNameById']('02')
        },
        addUser(){
            this.$store.commit('login/addUser',{
                id:nanoid(),
                name:nanoid()
            })
        },
        addAsyncUser(){
            this.$store.dispatch('login/addAsyncUser',{
                user:{
                    id:nanoid(),
                    name:nanoid()
                },
                time:500
            })
        }
    }
}
</script>

好了,这就是vuex模块化管理的简单使用


版权声明:本文为webblock原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。