详解如何在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 初体验(建议学习jquery)
Apr 25 Javascript
关于Javascript模块化和命名空间管理的问题说明
Dec 06 Javascript
文本框input聚焦失焦样式实现代码
Oct 12 Javascript
编写针对IE的JS代码两种编写方法
Jan 30 Javascript
JS实现从网页顶部掉下弹出层效果的方法
Aug 06 Javascript
jQuery实现的经典滑动门效果
Sep 22 Javascript
用JavaScript动态建立或增加CSS样式表的实现方法
May 20 Javascript
基于jquery实现弹幕效果
Sep 29 Javascript
JS移动端/H5同时选择多张图片上传并使用canvas压缩图片
Jun 20 Javascript
ReactNative短信验证码倒计时控件的实现代码
Jul 20 Javascript
微信小程序template模版的使用方法
Apr 13 Javascript
深入了解Vue3模板编译原理
Nov 19 Vue.js
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
IIS php环境配置PHP5 MySQL5 ZendOptimizer phpmyadmin安装与配置
2008/11/18 PHP
PHP+MySQL 制作简单的留言本
2009/11/02 PHP
php实现rc4加密算法代码
2012/04/25 PHP
ThinkPHP上使用多说评论插件的方法
2014/10/31 PHP
php调用新浪短链接API的方法
2014/11/08 PHP
php实现的树形结构数据存取类实例
2014/11/29 PHP
PHP中文乱码解决方案
2015/03/05 PHP
PHP实现基于mysqli的Model基类完整实例
2016/04/08 PHP
PHP实现Session入库/存入redis的方法
2017/05/04 PHP
PHP在弹框中获取foreach中遍历的id值并传递给地址栏
2017/06/13 PHP
jquery cookie插件代码类
2009/05/26 Javascript
javascript 程序库的比较(一)之DOM功能
2010/04/07 Javascript
jquery对dom的操作常用方法整理
2013/06/25 Javascript
Javascript生成全局唯一标识符(GUID,UUID)的方法
2016/02/27 Javascript
浅谈JavaScript的push(),pop(),concat()方法
2016/06/03 Javascript
vue组件父子间通信详解(三)
2017/11/07 Javascript
前端面试知识点目录一览
2019/04/15 Javascript
vue模仿网易云音乐的单页面应用
2019/04/24 Javascript
LayUI数据接口返回实体封装的例子
2019/09/12 Javascript
微信小程序自定义导航栏(模板化)
2019/11/15 Javascript
[49:41]NB vs NAVI Supermajor小组赛A组 BO3 第一场 6.2
2018/06/03 DOTA
[01:03:13]VG vs Pain 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
python 实现网上商城,转账,存取款等功能的信用卡系统
2016/07/15 Python
Python Series从0开始索引的方法
2018/11/06 Python
Python中@property的理解和使用示例
2019/06/11 Python
对tensorflow中的strides参数使用详解
2020/01/04 Python
django正续或者倒序查库实例
2020/05/19 Python
详解python中的闭包
2020/09/07 Python
解决使用Pandas 读取超过65536行的Excel文件问题
2020/11/10 Python
俄罗斯电子产品在线商店:UltraTrade
2020/01/30 全球购物
廉政教育的心得体会
2014/09/01 职场文书
公司委托书格式范本
2014/09/16 职场文书
就业协议书盖章的注意事项
2014/09/28 职场文书
功夫熊猫观后感
2015/06/10 职场文书
委托开发合同书(标准版)
2019/08/07 职场文书
win10忘记pin密码登录不了怎么办?win10忘记pin密码登不进去的解决方法
2022/07/07 数码科技