详解如何在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 相关文章推荐
prototype 源码中文说明之 prototype.js
Sep 22 Javascript
javascript delete 使用示例代码
Mar 29 Javascript
Prototype源码浅析 String部分(三)之HTML字符串处理
Jan 15 Javascript
JS自动适应的图片弹窗实例
Jun 29 Javascript
Jquery实现侧边栏跟随滚动条固定(兼容IE6)
Apr 02 Javascript
微信小程序 数据访问实例详解
Oct 08 Javascript
JS+Canvas实现的俄罗斯方块游戏完整实例
Dec 12 Javascript
微信小程序 基础组件与导航组件详细介绍
Feb 21 Javascript
JS实现元素上下左右移动效果
Oct 18 Javascript
12条写出高质量JS代码的方法
Jan 07 Javascript
浅谈Vue 性能优化之深挖数组
Dec 11 Javascript
js实现点击上传图片并设为模糊背景
Aug 02 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
把1316这个数表示成两个数的和,其中一个为13的倍数,另一个是11的倍数,求这两个数。
2011/06/24 PHP
Zend Framework使用Zend_Loader组件动态加载文件和类用法详解
2016/12/09 PHP
php之可变函数的实例详解
2017/09/13 PHP
PHP正则匹配到2个字符串之间的内容方法
2018/12/24 PHP
PHP设计模式之装饰器(装饰者)模式(Decorator)入门与应用详解
2019/12/13 PHP
JS效率个人经验谈(8-15更新),加入range技巧
2007/01/09 Javascript
通用javascript脚本函数库 方便开发
2009/10/13 Javascript
轻轻松松学JS调试(不下载任何工具)
2010/04/14 Javascript
cnblogs中在闪存中屏蔽某人的实现代码
2010/11/14 Javascript
面向对象继承实例(a如何继承b问题)(自写)
2013/07/01 Javascript
javascript单引号和双引号的区别和处理
2014/05/14 Javascript
jQuery表格插件datatables用法汇总
2016/03/29 Javascript
JavaScript提升性能的常用技巧总结【经典】
2016/06/20 Javascript
jQuery继承extend用法详解
2016/10/10 Javascript
JavaScript基于Dom操作实现查找、修改HTML元素的内容及属性的方法
2017/01/20 Javascript
微信小程序webview实现长按点击识别二维码功能示例
2019/01/24 Javascript
Javascript之高级数组API的使用实例
2019/03/08 Javascript
微信小程序 如何获取网络状态
2019/07/26 Javascript
Selenium执行JavaScript脚本的方法示例
2020/12/31 Javascript
使用Node.js和Socket.IO扩展Django的实时处理功能
2015/04/20 Python
详解django自定义中间件处理
2018/11/21 Python
Python3使用xml.dom.minidom和xml.etree模块儿解析xml文件封装函数的方法
2019/09/23 Python
如何将你的应用迁移到Python3的三个步骤
2019/12/22 Python
OpenCV4.1.0+VS2017环境配置的方法步骤
2020/07/09 Python
英国家喻户晓的家居商店:The Range
2019/03/25 全球购物
企业厂长岗位职责
2013/12/17 职场文书
甜品店的创业计划书范文
2014/01/02 职场文书
医院辞职信范文
2014/01/17 职场文书
户外宣传策划方案
2014/05/25 职场文书
感情真挚的毕业生求职信
2014/07/19 职场文书
安全责任书怎么写
2014/07/28 职场文书
安全生产工作汇报材料
2014/10/28 职场文书
接收函格式
2015/01/30 职场文书
导游词之介休绵山
2019/12/31 职场文书
springboot + mongodb 通过经纬度坐标匹配平面区域的方法
2021/11/01 MongoDB
未发现nvidia显卡怎么办?Win11系统中未检测到nvidia显卡解决教程
2022/04/08 数码科技