• vuex


     

     

    modules

    分模块管理

    import Vue from 'vue'
    import Vuex from 'vuex'
    import modules from './autoImport'
    console.log('modules', modules)
    Vue.use(Vuex)
    
    export default new Vuex.Store({
      modules,
    
      // 各个模块公共的状态管理 (可以没有)
      state: {
        isLogin: false
      },
      mutations: {
        changeLogin (state, payload) {
          state.isLogin = payload.flag
        }
      }
    })
    

      

    /**
     * Person.js 个人中心公共给数据状态管理文件
     */
    export default {
      namespaced: true,
      state: () => {
        return {
          name: 'zs',
          baseInfo: {
            sex: 'male',
            age: 10,
            email: '111@163.com'
          }
        }
      },
      getters: {
        showInfo (state) {
          return `${state.name}---${state.baseInfo.sex}`
        }
      },
      mutations: {
        changeAge (state, payload) {
          state.baseInfo.age = payload.age
        }
      },
       actions: {
        asyncChangeAge (context, payload) {
          // context.state 当前模块的state
          // context.rootState 整个store里面的全部状态
          setTimeout(() => {
            context.commit('changeAge', payload) //不要想当然的加Person/changeAge
          }, 2000)
        }
      }
    
    }

    使用

     <div class="home">
        <!--  访问state 平常是$store.state.XXX 现在需要加命名空间 $store.state.命名空间.XXX -->
        <div>直接访问person公共状态的state里面数据{{$store.state.Person.name}}</div>
    
       <!-- 访问getters 平常是$store.getters.XXX 现在是$store.getters['命名空间/XXX']-->
        <div>直接访问perosn公共状态的getters数据 {{$store.getters['Person/showInfo']}}</div>
        <el-button type="primary" @click="changeAge">changeAge</el-button>
              <el-button type="primary" @click="asyncChangeAge">asyncchangeAge</el-button>
        <div>person_age=={{$store.state.Person.baseInfo.age}}</div>
    
       
      </div>
    
    
    methods: {
    
        changeAge () {
          // mutations 平常是this.$store.commit('XXX',payload) 现在是this.$store.commit('命名空间/XXX',payload)
          this.$store.commit('Person/changeAge', { age: 30 })
        },
     asyncChangeAge () {
          this.$store.dispatch('Person/asyncChangeAge', { age: 50 })
        }
      },
    

    使用辅助函数

    更好的vuex代码组织方式(前面可以不用看了 但是前面也可以用)

     modules/index.js实现自动化导入定义的modules

    // 实现自动化导入。
    const context = require.context('./', true, /.js$/)
    // console.log(context);
    // console.log(context.keys()); //["./index.js", "./loading/index.js", "./tabBar/index.js"]
    const res = {}
    const arr = ['./index.js']
    context.keys().forEach(filePath => {
      if (arr.includes(filePath)) return
      const key = filePath.match(//(.*)./)[1]
      const value = context(filePath).default
      res[key] = value
    })
    export default res
    

      

    store/index.js主入口文件

    import Vue from 'vue'
    import Vuex from 'vuex'
    import modules from './modules'
    console.log('modules', modules)
    Vue.use(Vuex)
    
    export default new Vuex.Store({
      modules,
    
      // 各个模块公共的状态管理 (可以没有)
      state: {
        isLogin: false
      },
      mutations: {
        changeLogin (state, payload) {
          state.isLogin = payload.flag
        }
      }
    })
    

      

     

  • 相关阅读:
    Mysql:Error Code 1235,This version of MySQL doesn’t yet support ‘LIMIT & IN/ALL/ANY/SOME 错误解决
    java 发送带Basic Auth认证的http post请求
    spring-boot 加载本地静态资源文件路径配置
    mac上使用终端生成RSA公钥和密钥
    mysql 查看正在运行的进程
    mysql中You can’t specify target table for update in FROM clause错误解决方法
    Redis的三种启动方式
    Redis在Mac下的安装与使用方法
    Linux vi中查找字符内容的方法
    spring boot 之@JsonView 简单介绍
  • 原文地址:https://www.cnblogs.com/xiaoliziaaa/p/14172303.html
Copyright © 2020-2023  润新知