千家信息网

vuex使用实例分析

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,本篇内容主要讲解"vuex使用实例分析",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"vuex使用实例分析"吧!我在使用基于 vue.js 2.0 的UI框
千家信息网最后更新 2026年11月01日vuex使用实例分析

本篇内容主要讲解"vuex使用实例分析",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"vuex使用实例分析"吧!

我在使用基于 vue.js 2.0 的UI框架 ElementUI 开发网站的时候 , 就遇到了这种问题 : 一个页面有很多表单 , 我试图将表单写成一个单文件组件 , 但是表单 ( 子组件 ) 里的数据和页面 ( 父组件 ) 按钮交互的时候 , 它们之间的通讯很麻烦 :

之所以这么麻烦 , 是因为父组件可以通过 props 给子组件传递参数 , 但子组件内却不能直接修改父组件传过来的参数。

这时候 , 使用 vuex 就可以比较方便的解决这种问题了 :

是不是方便了许多 , 这就是 vuex 最简单的应用 , 不要被网上其他教程吓到 , vuex 原来可以这么简单 !

安装、使用 vuex

首先我们在 vue.js 2.0 开发环境中安装 vuex :

npm install vuex --save

然后 , 在 main.js 中加入 :

import vuex from 'vuex'Vue.use(vuex);var store = new vuex.Store({//store对象  state:{    show:false  }})

再然后 , 在实例化 Vue对象时加入 store 对象 :

new Vue({ el: '#app', router, store,//使用store template: '', components: { App }})

完成到这一步 , 上述例子中的 $store.state.show 就可以使用了。

modules

前面为了方便 , 我们把 store 对象写在了 main.js 里面 , 但实际上为了便于日后的维护 , 我们分开写更好 , 我们在 src 目录下 , 新建一个 store 文件夹 , 然后在里面新建一个 index.js :

import Vue from 'vue'import vuex from 'vuex'Vue.use(vuex);export default new vuex.Store({  state:{    show:false  }})

那么相应的 , 在 main.js 里的代码应该改成 :

//vueximport store from './store'new Vue({ el: '#app', router, store,//使用store template: '', components: { App }})

这样就把 store 分离出去了 , 那么还有一个问题是 : 这里 $store.state.show 无论哪个组件都可以使用 , 那组件多了之后 , 状态也多了 , 这么多状态都堆在 store 文件夹下的 index.js 不好维护怎么办 ?

我们可以使用 vuex 的 modules , 把 store 文件夹下的 index.js 改成 :

import Vue from 'vue'import vuex from 'vuex'Vue.use(vuex);import dialog_store from '../components/dialog_store.js';//引入某个store对象export default new vuex.Store({  modules: {    dialog: dialog_store  }})

这里我们引用了一个 dialog_store.js , 在这个 js 文件里我们就可以单独写 dialog 组件的状态了 :

export default {  state:{    show:false  }}

做出这样的修改之后 , 我们将之前我们使用的 $store.state.show 统统改为 $store.state.dialog.show 即可。

如果还有其他的组件需要使用 vuex , 就新建一个对应的状态文件 , 然后将他们加入 store 文件夹下的 index.js 文件中的 modules 中。

modules: {  dialog: dialog_store,  other: other,//其他组件}

mutations

前面我们提到的对话框例子 , 我们对vuex 的依赖仅仅只有一个 $store.state.dialog.show 一个状态 , 但是如果我们要进行一个操作 , 需要依赖很多很多个状态 , 那管理起来又麻烦了 !

mutations 登场 , 问题迎刃而解 :

export default {  state:{//state    show:false  },  mutations:{    switch_dialog(state){//这里的state对应着上面这个state      state.show = state.show?false:true;      //你还可以在这里执行其他的操作改变state    }  }}

使用 mutations 后 , 原先我们的父组件可以改为 :

使用 $store.commit('switch_dialog') 来触发 mutations 中的 switch_dialog 方法。

这里需要注意的是:

1、mutations 中的方法是不分组件的 , 假如你在 dialog_stroe.js 文件中的定义了

switch_dialog 方法 , 在其他文件中的一个 switch_dialog 方法 , 那么

$store.commit('switch_dialog') 会执行所有的 switch_dialog 方法。

2、mutations里的操作必须是同步的。

你一定好奇 , 如果在 mutations 里执行异步操作会发生什么事情 , 实际上并不会发生什么奇怪的事情 , 只是官方推荐 , 不要在 mutationss 里执行异步操作而已。

actions

多个 state 的操作 , 使用 mutations 会来触发会比较好维护 , 那么需要执行多个 mutations 就需要用 action 了:

export default {  state:{//state    show:false  },  mutations:{    switch_dialog(state){//这里的state对应着上面这个state      state.show = state.show?false:true;      //你还可以在这里执行其他的操作改变state    }  },  actions:{    switch_dialog(context){//这里的context和我们使用的$store拥有相同的对象和方法      context.commit('switch_dialog');      //你还可以在这里触发其他的mutations方法    },  }}

那么 , 在之前的父组件中 , 我们需要做修改 , 来触发 action 里的 switch_dialog 方法:

使用 $store.dispatch('switch_dialog') 来触发 action 中的 switch_dialog 方法。

官方推荐 , 将异步操作放在 action 中。

getters

getters 和 vue 中的 computed 类似 , 都是用来计算 state 然后生成新的数据 ( 状态 ) 的。

还是前面的例子 , 假如我们需要一个与状态 show 刚好相反的状态 , 使用 vue 中的 computed 可以这样算出来 :

computed(){  not_show(){    return !this.$store.state.dialog.show;  }}

那么 , 如果很多很多个组件中都需要用到这个与 show 刚好相反的状态 , 那么我们需要写很多很多个 not_show , 使用 getters 就可以解决这种问题 :

export default {  state:{//state    show:false  },  getters:{    not_show(state){//这里的state对应着上面这个state      return !state.show;    }  },  mutations:{    switch_dialog(state){//这里的state对应着上面这个state      state.show = state.show?false:true;      //你还可以在这里执行其他的操作改变state    }  },  actions:{    switch_dialog(context){//这里的context和我们使用的$store拥有相同的对象和方法      context.commit('switch_dialog');      //你还可以在这里触发其他的mutations方法    },  }}

我们在组件中使用 $store.state.dialog.show 来获得状态 show , 类似的 , 我们可以使用 $store.getters.not_show 来获得状态 not_show 。

注意 : $store.getters.not_show 的值是不能直接修改的 , 需要对应的 state 发生变化才能修改。

mapState、mapGetters、mapActions

很多时候 , $store.state.dialog.show 、$store.dispatch('switch_dialog') 这种写法又长又臭 , 很不方便 , 我们没使用 vuex 的时候 , 获取一个状态只需要 this.show , 执行一个方法只需要 this.switch_dialog 就行了 , 使用 vuex 使写法变复杂了 ?

使用 mapState、mapGetters、mapActions 就不会这么复杂了。

以 mapState 为例 :

相当于 :

mapGetters、mapActions 和 mapState 类似 , mapGetters 一般也写在 computed 中 , mapActions 一般写在 methods 中。

到此,相信大家对"vuex使用实例分析"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

组件 方法 状态 文件 对象 问题 实例 文件夹 时候 实例分析 分析 例子 实际 表单 麻烦 复杂 相同 事情 内容 写法 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网黑科技 涨乐互联网科技 互联网科技社 科技互联网技术 远拓互联网科技 互联网 视角下的科技创新 互联网 新科技 互联网科技股午盘股票涨跌 恒生科技互联网指数分析 现代科技和互联网有关系吗 科技互联网的估值 湖北码尼互联网科技有限公司电话 杭州壁岐互联网科技有限公司 苏州铭阳互联网科技有限公司 互联网科技大奖都有哪些公司 徐州市互联网科技有限公司 伍佰万互联网科技怎么赚钱 云南互联网科技学费 互联网的黑科技实验室 武汉亿视互联网科技有限公司 港股互联网科技股 团飞科技与伯堂互联网服务平台 黑科技闪耀互联网之光 为客找房互联网科技公司怎么样 工业互联网展湾科技股份有限公司 沐思想互联网科技有限公司 工业互联网科技成果转化 科技互联网经济论坛 安徽零酒互联网科技有限公司 杭州融税互联网科技有限公司
0