美文网首页Vue.js
vuex 构建模块化使用

vuex 构建模块化使用

作者: 无枉少年 | 来源:发表于2020-06-24 02:55 被阅读0次

vuex是什么?

先引用官方原话:Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。Vuex 也集成到 Vue 的官方调试工具 devtools extension,提供了诸如零配置的 time-travel 调试、状态快照导入导出等高级调试功能。

通俗来说,vuex就是管理全局的变量,可以在任何组件中调用和修改数据。父子组件通信时,我们通常会采用 props + emit 这种方式。但当通信双方不是父子组件甚至压根不存在相关联系,或者一个状态需要共享给多个组件时,就会非常麻烦,数据也会相当难维护,这对我们开发来讲就很不友好。vuex 这个时候就很实用,不过在使用vuex之后也带来了更多的概念和框架,需慎重!

vuex有几个模块?

vuex一共分为五个模块 State、gertters、mutations、actions、mudules(模块化)
他们之间的关系图:


image.png

State :单一状态树,类似vue中的data,存放数据的。
getters:计算属性,类似于computed一样,当它的依赖值发生变化的时候,它就会重新计算赋值,并有缓存。
mutations:操作state数据(同步)
actions:action 提交的是 mutation,而不是直接变更状态。Action 可以包含任意异步操作。
mudules:模块化状态管理

代码实现

代码模块化

store 下的index.js

import Vue from 'vue'
import Vuex from 'vuex'

import modules from './modules_export'

Vue.use(Vuex)

export default new Vuex.Store({
  modules: {
    modules
  }
})

store下的modules_export.js

const files = require.context('./modules', false, /\.js$/)
const modules = {}

files.keys().forEach(key => {
  modules[key.replace(/(\.\/|\.js)/g, '')] = files(key).default
})
//console.log(modules);
export default {
  namespaced: true,
  modules
}

store下的 mudules文件下的index.js


//组件通过 this.$store.dispatch('',data) 对actions 的方法,然后用commit对mutations操作 
export default {
    namespaced: true,
    state: {
        //存放键值所在的管理状态
        name: 123
    },
    getters: {
        //使用this.$store.getters.g_name   可以获取state中的name值
        g_name: state => {
            return state.name
        }
    },
    actions: {
        a_edit1(context, payload) {
            return new Promise((resolve) => {
                setTimeout(() => {
                    context.commit('m_edit1', payload)
                    resolve()
                }, 2000)
            })
        }
    },
    mutations: {
        m_edit1(state, data) {
            state.name += data
        }
    },
}

main.js中的配置

import Vue from 'vue'
import App from './App.vue'
import store from './store'


Vue.config.productionTip = false

new Vue({
  store,//将vuex挂载在vue实例
  render: h => h(App),
}).$mount('#app')

组件中使用vuex

<template>
  <div id="app">
     <h1>{{g_name}}</h1>
     <button style="margin:10px" @click="add1">加1</button>
  </div>
</template>

<script>
import { mapGetters,mapActions } from "vuex"; //储存数据
export default {
  name: 'App',
  data(){
    return{

    }
  },
  computed: {
    ...mapGetters("modules/index", ["g_name"])
  },
  methods: {
    ...mapActions("modules/index",['a_edit1']),
    add1(){
      this.$store.dispatch('modules/index/a_edit1',1);
      console.log(this.g_name)
    },
  },
}

</script>

<style>
#app {
  font-family: Avenir, Helvetica, Arial, sans-serif;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-align: center;
  color: #2c3e50;
  margin-top: 60px;
}
</style>

以上是vuex模块化基础使用

相关文章

  • vuex 构建模块化使用

    vuex是什么? 先引用官方原话:Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。它采用集中式存储...

  • 模块化vuex,获取、设置数据,及刷新保留数据方法

    前言 1.模块化vuex2.获取vuex中的数据3.设置vuex中的数据4.刷新之后,保留数据 模块化vuex 数...

  • 2018-03-13

    Vuex 进阶——模块化组织 Vuex 前两篇讲解了一下 Vuex 的基本使用方法,可是在实际项目中那么写肯定是不...

  • vuex模块化使用

    module/user.js代码 ``` import Vue from 'vue' import Vuex fr...

  • Vuex的模块化拆解

    上次已经说了Vuex的基本使用方法这次来说下Vuex的模块化拆解,我个人挺喜欢这样,方便维护 app.vue ma...

  • 使用 node 模拟请求接口

    上一篇:Vuex 进阶——模块化组织 Vuex 使用 Vue 写项目肯定会遇到一个问题,如何模拟服务端请求数据,那...

  • VUEX模块化

    vuex模块化官方文档 项目github地址 在vuex的官网上,关于模块化和热重载的文档都是蛮详细的,这边也就不...

  • vuex学习

    主要是看文档 vuex官方文档 基础:提取关键字/句 如果在模块化构建系统中,请确保在开头调用了 Vue.use(...

  • vuex相关文章

    vuex模块化和命名空间的实例代码

  • vuex持久化+模块化实战用法(进阶篇)

    上一篇:vuex刷新数据消失不见解决方案 Vuex模块化 模块化后的 store 大概长这样,如果画的不对,欢迎留...

网友评论

    本文标题:vuex 构建模块化使用

    本文链接:https://www.haomeiwen.com/subject/sjkffktx.html