详解如何在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 相关文章推荐
js内置对象 学习笔记
Aug 01 Javascript
javascript:文字不间断向左移动的实例代码
Aug 08 Javascript
jquery validate添加自定义验证规则(验证邮箱 邮政编码)
Dec 04 Javascript
JavaScript设置获取和设置属性的方法
Mar 04 Javascript
javascript中的previousSibling和nextSibling的正确用法
Sep 16 Javascript
轻松学习jQuery插件EasyUI EasyUI创建RSS Feed阅读器
Nov 30 Javascript
jquery中cookie用法实例详解(获取,存储,删除等)
Jan 04 Javascript
DWR中各种java方法的调用
May 04 Javascript
vue2 设置router-view默认路径的实例
Sep 20 Javascript
Node使用Nodemailer发送邮件的方法实现
Feb 24 Javascript
vue使用echarts图表自适应的几种解决方案
Dec 04 Vue.js
微信小程序 WeUI扩展组件库的入门教程
Apr 21 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令牌 Token改进版
2008/07/18 PHP
PHP开发APP端微信支付功能
2017/02/17 PHP
一个javascript参数的小问题
2008/03/02 Javascript
jquery 常用操作整理 基础入门篇
2009/10/14 Javascript
JQuery读取XML文件数据并显示的实现代码
2009/12/16 Javascript
教您去掉ie网页加载进度条的方法
2010/12/09 Javascript
js一般方法改写成面向对象方法的无限级折叠菜单示例代码
2013/07/04 Javascript
登陆成功后自动计算秒数执行跳转
2014/01/23 Javascript
Bootstrap每天必学之按钮(一)
2015/11/24 Javascript
用JavaScript动态建立或增加CSS样式表的实现方法
2016/05/20 Javascript
jQuery on()方法绑定动态元素的点击事件无响应的解决办法
2016/07/07 Javascript
JavaScript从0开始构思表情插件
2016/07/26 Javascript
用瀑布流的方式在网页上插入图片的简单实现方法
2016/09/23 Javascript
AngularJs基于角色的前端访问控制的实现
2016/11/07 Javascript
Javascript 判断两个IP是否在同一网段实例代码
2016/11/28 Javascript
微信小程序登录态控制深入分析
2017/04/12 Javascript
jquery单击文字或图片内容放大并居中显示
2017/06/23 jQuery
swiper在angularjs中使用循环轮播失效的解决方法
2018/09/27 Javascript
详解基于vue-cli3快速发布一个fullpage组件
2019/03/08 Javascript
微信小程序中使用Async-await方法异步请求变为同步请求方法
2019/03/28 Javascript
vue路由切换之淡入淡出的简单实现
2019/10/31 Javascript
python在windows和linux下获得本机本地ip地址方法小结
2015/03/20 Python
Python实现PS图像调整黑白效果示例
2018/01/25 Python
pandas groupby 分组取每组的前几行记录方法
2018/04/20 Python
用python打印菱形的实操方法和代码
2019/06/25 Python
python实现简单图书管理系统
2019/11/22 Python
公共汽车、火车和飞机票的通用在线预订和销售平台:INFOBUS
2019/11/30 全球购物
意大利在线高尔夫商店:Online Golf
2021/03/09 全球购物
营销主管自我评价怎么写
2013/09/19 职场文书
千元咖啡店的创业计划书范文
2013/12/29 职场文书
公司担保书格式范文
2014/05/12 职场文书
2014年助理政工师工作总结
2014/12/19 职场文书
盗窃罪辩护词范文
2015/05/21 职场文书
小学生组织委员竞选稿
2015/11/21 职场文书
致创业的您:这类人不适合餐饮创业
2019/08/19 职场文书
解决Mysql的left join无效及使用的注意事项说明
2021/07/01 MySQL