详解如何在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 相关文章推荐
网页中的图片的处理方法与代码
Nov 26 Javascript
jQuery获取地址栏参数插件(模仿C#)
Oct 26 Javascript
jquery实现网站超链接和图片提示效果
Mar 21 Javascript
JS读取XML文件示例代码
Nov 15 Javascript
jQuery 中的 DOM 操作
Apr 26 Javascript
jQuery实现邮箱下拉列表自动补全功能
Sep 08 Javascript
JavaScript+CSS相册特效实例代码
Sep 07 Javascript
angular4实现tab栏切换的方法示例
Oct 21 Javascript
JavaScript运行原理分析
Feb 09 Javascript
JS中移除非数字最多保留一位小数
May 09 Javascript
基于Angular中ng-controller父子级嵌套的相关属性详解
Oct 08 Javascript
vue指令之表单控件绑定v-model v-model与v-bind结合使用
Apr 17 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
解析smarty 截取字符串函数 truncate的用法介绍
2013/06/20 PHP
JavaScript学习笔记(二) js对象
2011/10/25 Javascript
JQuery的AJAX实现文件下载的小例子
2013/05/15 Javascript
Javascript排序算法之计数排序的实例
2014/04/05 Javascript
jQuery制作可自定义大小的拼图游戏
2015/03/30 Javascript
jQuery实现首页顶部可伸缩广告特效代码
2015/04/15 Javascript
JS组件Bootstrap Select2使用方法详解
2020/04/17 Javascript
原生js实现淘宝购物车功能
2020/06/23 Javascript
vue.js单页面应用实例的简单实现
2017/04/10 Javascript
从零开始学习Node.js系列教程四:多页面实现的数学运算示例
2017/04/13 Javascript
微信小程序 下拉菜单简单实例
2017/04/13 Javascript
JS获取数组中出现次数最多及第二多元素的方法
2017/10/27 Javascript
JS中DOM元素的attribute与property属性示例详解
2018/09/04 Javascript
vue控制多行文字展开收起的实现示例
2019/10/11 Javascript
[01:08:57]2014 DOTA2国际邀请赛中国区预选赛 5 23 CIS VS LGD第二场
2014/05/24 DOTA
python实现一次创建多级目录的方法
2015/05/15 Python
Python设计足球联赛赛程表程序的思路与简单实现示例
2016/06/28 Python
不同版本中Python matplotlib.pyplot.draw()界面绘制异常问题的解决
2017/09/24 Python
python3.6 实现AES加密的示例(pyCryptodome)
2018/01/10 Python
Python实现将MySQL数据库表中的数据导出生成csv格式文件的方法
2018/01/11 Python
python调用Matplotlib绘制分布点并且添加标签
2018/05/31 Python
Python3调用百度AI识别图片中的文字功能示例【测试可用】
2019/03/13 Python
基于Tensorflow高阶读写教程
2020/02/10 Python
python shell命令行中import多层目录下的模块操作
2020/03/09 Python
Python如何操作office实现自动化及win32com.client的运用
2020/04/01 Python
TensorFlow2.1.0最新版本安装详细教程
2020/04/08 Python
python用opencv 图像傅里叶变换
2021/01/04 Python
澳大利亚领先的运动鞋商店:Hype DC
2018/03/31 全球购物
PHP如何去执行一个SQL语句
2016/03/05 面试题
工程部经理岗位职责
2013/12/08 职场文书
社区活动总结报告
2014/05/05 职场文书
小学生九一八纪念日83周年演讲稿500字
2014/09/17 职场文书
党的群众路线教育实践活动整改落实情况报告
2014/10/28 职场文书
导游词之无锡丝业博物馆
2019/11/12 职场文书
Java基础之this关键字的使用
2021/06/30 Java/Android
使用Redis实现分布式锁的方法
2022/06/16 Redis