xuex module 的简单用法

什么是module?

在Vue中State使用是单一状态树结构,应该的所有的状态都放在state里面,如果项目比较复杂,那state是一个很大的对象,store对象也将对变得非常大,难于管理。
module:可以让每一个模块拥有自己的state、mutation、action、getters,使得结构非常清晰,方便管理。

module 的简单应用

最近在用vue-admin-element开发一个后台管理系统 算是真正意义上的接触了vuex 看了人家的代码 才知道自己多么的井底之蛙 好了废话不多说了

目录结构

user.js

 1 const user = {
 2   state: {
 3     user: '',
 4     status: '',
 5     code: '',
 6     token: getToken(),
 7     name: '',
 8     avatar: '',
 9     introduction: '',
10     roles: [],
11     setting: {
12       articlePlatform: []
13     },
14     content:'我想测试一下,我能拿到modules下 state里面的值吗'
15   },
16 
17   mutations: {
18 
19   },
20 
21   actions: {
22 
23   }
24 }
25 
26 export default user//导出user

index.js

import Vue from 'vue'
import Vuex from 'vuex'
import getters from './getters'

Vue.use(Vuex)
// 精简版的写法不用每次都引入模块
//获取 上级目录modules的 所有后缀名为 .js的文件
const modulesFiles = require.context('./modules', true, /.js$/)
console.log(modulesFiles)
const modules = modulesFiles.keys().reduce((modules, modulePath) => {
  const moduleName = modulePath.replace(/^./(.*).w+$/, '$1')
  const value = modulesFiles(modulePath)
  modules[moduleName] = value.default
  return modules
}, {})

const store = new Vuex.Store({
  modules,
  getters
})


export default store

index.vue

<template>
  <div class="parent">
    <h1>获取的module里面state的值{{content}}</h1>
  </div>
</template>
<script>
  import {mapActions , mapMutations , mapState ,mapGetters} from 'vuex'
  export default{
     name:"parent",
    data(){
      return {

      }
      
    },
    mounted(){
        console.log(this.content)
    },
    methods:{
        
    },
    computed:{
        //拿到vuex里面的 state里面的值 这是辅助函数的强大之处 由于每个模块之间 都是单独的,所以获取值加上模块的名字才能拿到state的值
        ...mapState({
            content: state => state.user.content,
        })
    }
  }
</script>

<style scoped>
    
</style>

一开始 获取state里面的值 总是获取不到 因为以前都是一个state 直接通过state.健名就能拿到 但是加上module之后就 必须加上 文件名不然state的值就获取不到了 如user下面state里面的content 获取的时候 就是 state=>state.user.content 直接用state.content是取不到的

原文地址:https://www.cnblogs.com/qq976864507/p/12889157.html