vuex状态管理工具的基础使用

1 篇文章 0 订阅

vuex应用程序开发的状态管理模式

  • 创建store文件
import Vue from 'vue';
import Vuex from 'vuex';

Vue.use(Vuex);

export default new Vuex.Store({
    state: {}, // 存储共享数据
    mutations: {}, // 修改共享数据
    getters: {}, // 获取处理后的数据
    actions:{},
    modules:{}
})
  • state - 共享数据存储
    • store引用方法:this.$store === import store
// store.js
export default new Vuex.Store({
    state: {
        count: 0
    }
})

// component调用方法一
export default {
  computed: {
    count() {
      return this.$store.state.number;
    },
  }
}

// component调用方法二
import { mapState } form 'vuex';
export default {
  computed: {
    ...mapState({
        count: 'count'
    }),
    ...mapState(['count']),
    ...mapState({
        count: state => state.count
    })
  }
}
  • mutations - 修改共享数据
    • mutations 必须同步执行
// store.js文件
export default Vue.Store({
    state: {
        count: 0
    },
    mutations: {
        addCount(state) {
            state.count++;
        },
        cutCount(state) {
            state.count--;
        }
    }
})

// mutations调用方法一
methods: {
    addCount() {
        this.$store.commit('addCount');
    }
}

// mutations调用方法二
methods: {
    ...mapMutations([
        'addCount', 'cutCount'
    ])
},
  • getters 获取编辑后的共享数据
// store.js文件
export default new Vuex.Store({
    state: {
        count: 0;
    },
    getters: {
        doubleCount: state => state.count * 2
    }
})

// component 调用方法一
computed: {
    doubleCount() {
        return this.$store.getters.doubleCount;
    }
}

// component 调用方法二
computed: {
    ...mapGetters(['doubleCount']),
}
  • actions - 提交的是 mutation,而不是直接变更状态
    • actions 可以异步操作
// store.js 文件
export default Vuex.Store({
    state: {
        count: 0
    },
    mutations: {
        addCount: state => state.count++
    },
    actions:{
        increment(context) {
            setTimeout(() => {
                context.commit('addCount');
            }, 2000);
        }
    },
})

// component 调用方法一
methods: {
    increment() {
        this.$store.dispatch('increment').then(
            res => {...}
        );
    }
}

// component 调用方法二
methods: {
    ...mapActions(['increment'])
}
  • module - 将store分割成模块管理
    • namespace: true;启用命名空间,需通过路径访问

a.js文件  模块2

const state = {
    name: '张三'
}
const mutations = {
    changeName: (state, name) => state.name = name
}
const actions = {
  actionChangeName({ commit }, name) {
      commit('changeName', name);
  }
}
export default {
  namespaced: true, // 命名空间
  state,
  mutations,
  actions
}

 b.js文件 模块2

const state = {
    name: '李四'
}
const mutations = {
    changeName: (state, name) => state.name = name
}
const actions = {
  actionChangeName({ commit }, name) {
      commit('changeName', name);
  }
}
export default {
  namespaced: true,
  state,
  mutations,
  actions
}

getters.js文件  便于组件直接获取模块中的state

const getters = {
    nameA: state => state.a.name,
    nameB: state => state.b.name
}

export default getters;

index.js store文件

import Vue from 'vue';
import Vuex from 'vuex';
import a from './modules/a'
import b from './modules/b'
import getters from './getters'

Vue.use(Vuex);
export default new Vuex.Store({
  modules:{
    a, b
  },
  getters
})

模块快速引入办法

// 快速引入所有模块
import Vue from 'vue';
import Vuex from 'vuex';
import getters from './getters'

Vue.use(Vuex);

const modulesFiles = require.context('./modules', true, /\.js$/)
const modules = modulesFiles.keys().reduce((modules, modulePath) => {
  const moduleName = modulePath.replace(/^\.\/(.*)\.\w+$/, '$1')
  const value = modulesFiles(modulePath)
  modules[moduleName] = value.default
  return modules
}, {})

export default new Vuex.Store({
  modules,
  getters
})

 

 组件内调用:

computed: {
    // 直接获取state
    ...mapState({
        nameA: state => state.a.name,
        nameB: state => state.b.name,
    })
    // 通过getters文件
    ...mapGetters(['nameA', 'nameB'])
},
methods: {
    change() {
        this.$store.commit('a/changeName', '王五');
        this.$store.dispatch('b/actionChangeName', '马六');
    }
},

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值