详解如何在vue-cli中使用vuex


Posted in Javascript onAugust 07, 2018

前言

众所周知,vuex 是一个专为 vue.js 应用程序开发的状态管理模式,在构建一个中大型单页应用中使用vuex可以帮助我们更好地在组件外部管理状态。而vue-cli是vue的官方脚手架,它能帮助我们方便的配置webpack。这样看来,有很大的可能我们需要同时使用vue-cli与vuex

如何在vue-cli中使用vuex

项目搭建及添加vuex

当我们使用vue-cli搭建一个vue项目的时候(假设项目名为learn-vuex),搭建完成后的文件目录是这样子的

详解如何在vue-cli中使用vuex 

首先使用npm install --save-dev vuex 把vuex添加到依赖,接下来就是如何在组件中使用vuex,大体上来说有以下两种形式。

通过 store 选项

如果vue-cli搭建成功,在src目录下会有一个main.js文件,main.js的主要作用是把项目中最顶层的app.vue组件挂载到DOM中,其他所有的组件都可以看做是app.vue的子组件。

在main.js中,做如下操作

import Vue from 'vue'
import App from './App'
import router from './router'
import Vuex from 'vuex'; 

Vue.config.productionTip = false

//注意下面的代码
Vue.use(Vuex);
const store = new Vuex.Store({
 state: {},
 getters: {},
 actions: {},
 mutations: {}
});
//注意router选项,此处的写法等同于store: store
new Vue({
 el: '#app',
 router,
 store,
 components: { App },
 template: '<App/>'
})

在组件中,就可以通过this.$store 来使用store实例

如果在项目中需要配置的vuex选项很多,我们则应该把vuex的相关代码分割到不同模块

在src下新建store文件夹,在文件夹中创建如下几个文件

详解如何在vue-cli中使用vuex 

我们可以随意设置文件名,但最好可以通过文件名就能判断出这个文件是用来干嘛的

  1. index.js:整合各个模块,创建并导出vuex实例
  2. rootState.js:配置vuex实例的state选项
  3. getters.js:getter选项
  4. mutations.js:mutations选项
  5. actions.js:actions选项

在index.js中,我们需要

import Vue from 'vue';
import Vuex from 'vuex';
import state from './rootState.js';
import getters from './getters.js';
import mutations from './mutations.js';
import actions from './actions.js';

Vue.use(Vuex);
const store = new Vuex.Store({
 state,
 getters,
 actions,
 mutations
});

export default store;

剩下的四个文件配置都差不多一样,以rootState.js为例

const state = {
 count: 0,
 arr: [0,1,2,3,4,5]
}

export default state;

如此这般,在main.js中,我们需要编写的代码就减少了很多

import Vue from 'vue'
import App from './App'
import router from './router'
import store from './store/index'; 

Vue.config.productionTip = false

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

将vuex实例挂载到vue原型链上

这是一种非主流的方式,主要是受axios启发,这里有一篇博客讲解如何在vue组件中使用axios,将axios挂载到vue原型链上是因为不能通过vue.use来使用axios

在这种方法中,我们需要

// The Vue build version to load with the `import` command
// (runtime-only or standalone) has been set in webpack.base.conf with an alias.
import Vue from 'vue'
import App from './App'
import router from './router'
import store from './store/index'; 

Vue.config.productionTip = false

//在vue中使用vuex必须先调用vue.use方法
Vue.use(Vuex);
//具体挂载到vue原型的哪个属性上,可以由我们自行决定
//遇到配置繁多的情况也可以进行分割
Vue.prototype.$store = new Vuex.Store({
 state: {},
 getters: {},
 actions: {},
 mutations: {}
});

//没有了store选项
new Vue({
 el: '#app',
 router,
 components: { App },
 template: '<App/>'
})

如此这般,还是可以通过this.$store 来使用vuex

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jquery.validate的使用说明介绍
Nov 12 Javascript
js使用eval解析json实例与注意事项分享
Jan 18 Javascript
把jQuery的类、插件封装成seajs的模块的方法
Mar 12 Javascript
node.js Web应用框架Express入门指南
May 28 Javascript
jQuery选择id属性带有点符号元素的方法
Mar 17 Javascript
jQuery+ajax实现文章点赞功能的方法
Dec 31 Javascript
详解js中class的多种函数封装方法
Jan 03 Javascript
JavaScript中自带的 reduce()方法使用示例详解
Aug 10 Javascript
基于JavaScript实现全选、不选和反选效果
Feb 15 Javascript
详解数组Array.sort()排序的方法
May 09 Javascript
推荐三款日期选择插件(My97DatePicker、jquery.datepicker、Mobiscroll)
Apr 21 jQuery
一百行JS代码实现一个校验工具
Apr 30 Javascript
React styled-components设置组件属性的方法
Aug 07 #Javascript
微信小程序methods中定义的方法互相调用的实例代码
Aug 07 #Javascript
详解vue axios用post提交的数据格式
Aug 07 #Javascript
解决koa2 ctx.render is not a function报错问题
Aug 07 #Javascript
使用Nuxt.js改造已有项目的方法
Aug 07 #Javascript
echarts实现地图定时切换散点与多图表级联联动详解
Aug 07 #Javascript
详解Nuxt.js部署及踩过的坑
Aug 07 #Javascript
You might like
php面向对象全攻略 (十七) 自动加载类
2009/09/30 PHP
基于php上传图片重命名的6种解决方法的详细介绍
2013/04/28 PHP
php检测网页是否被百度收录的函数代码
2013/10/09 PHP
PHPStrom中实用的功能和快捷键大全
2015/09/23 PHP
PHP魔术方法以及关于独立实例与相连实例的全面讲解
2016/10/18 PHP
PHP对XML内容进行修改和删除实例代码
2016/10/26 PHP
Windows 下安装 swoole 图文教程(php)
2017/06/05 PHP
php中如何执行linux命令详解
2018/11/06 PHP
JavaScript 对象成员的可见性说明
2009/10/16 Javascript
JavaScript实现多维数组的方法
2013/11/20 Javascript
怎么选择Javascript框架(Javascript Framework)
2013/11/22 Javascript
JavaScript实现的伸展收缩型菜单代码
2015/10/14 Javascript
Jquery操作Ajax方法小结
2015/11/29 Javascript
使用JQuery选择HTML遍历函数的方法
2016/09/17 Javascript
jQuery和JavaScript节点插入元素的方法对比
2016/11/18 Javascript
angularjs2 ng2 密码隐藏显示的实例代码
2017/08/01 Javascript
微信小程序将字符串生成二维码图片的操作方法
2018/07/17 Javascript
JavaScript 截取字符串代码实例
2019/09/05 Javascript
优雅的使用javascript递归画一棵结构树示例代码
2019/09/22 Javascript
纯js实现无缝滚动功能代码实例
2020/02/21 Javascript
解决vue无法侦听数组及对象属性的变化问题
2020/07/17 Javascript
eslint+prettier统一代码风格的实现方法
2020/07/22 Javascript
[01:06:18]DOTA2-DPC中国联赛 正赛 Phoenix vs Dynasty BO3 第二场 1月26日
2021/03/11 DOTA
python任务调度实例分析
2015/05/19 Python
python中的内置函数max()和min()及mas()函数的高级用法
2018/03/29 Python
正则给header的冒号两边参数添加单引号(Python请求用)
2019/08/09 Python
python实现将两个文件夹合并至另一个文件夹(制作数据集)
2020/04/03 Python
新手常见Python错误及异常解决处理方案
2020/06/18 Python
Django使用django-simple-captcha做验证码的实现示例
2021/01/07 Python
手把手教你用Django执行原生SQL的方法
2021/02/18 Python
欧洲领先的电子和电信零售商和服务提供商:Currys PC World Business
2017/12/05 全球购物
专营店会计助理岗位职责
2013/11/29 职场文书
父母寄语大全
2014/04/12 职场文书
学校学雷锋活动总结
2014/06/26 职场文书
让子弹飞观后感
2015/06/11 职场文书
小学学习委员竞选稿
2015/11/20 职场文书