详解如何在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 相关文章推荐
javascript中创建对象的几种方法总结
Nov 01 Javascript
浅析jQuery(function(){})与(function(){})(jQuery)之间的区别
Jan 09 Javascript
用json方式实现在 js 中建立一个map
May 02 Javascript
js实现类似于add(1)(2)(3)调用方式的方法
Mar 04 Javascript
JQuery CheckBox(复选框)操作方法汇总
Apr 15 Javascript
基于Bootstrap的Java开发问题汇总(Spring MVC)
Jan 15 Javascript
JS中的phototype详解
Feb 04 Javascript
jQuery简单判断值是否存在于数组中的方法示例
Apr 17 jQuery
小程序实现列表多个批量倒计时
Jan 29 Javascript
小程序登录/注册页面设计的实现代码
May 24 Javascript
ES6 async、await的基本使用方法示例
Jun 06 Javascript
Vue3.0写自定义指令的简单步骤记录
Jun 27 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
php简单静态页生成过程
2008/03/27 PHP
PHP大文件分割上传 PHP分片上传
2017/08/28 PHP
php json转换相关知识(小结)
2018/12/21 PHP
php使用mysqli和pdo扩展,测试对比连接mysql数据库的效率完整示例
2019/05/09 PHP
关于js日期转化为毫秒数“节省20%的效率和和节省9个字符“问题
2012/03/01 Javascript
深入分析JSONP跨域的原理
2014/12/10 Javascript
JS+CSS实现带关闭按钮DIV弹出窗口的方法
2015/02/27 Javascript
JS组件Bootstrap导航条使用方法详解
2016/04/29 Javascript
CKEditor无法验证的解决方案(js验证+jQuery Validate验证)
2016/05/09 Javascript
JS实现星星评分功能实例代码(两种方法)
2016/06/09 Javascript
jquery实现文字单行横移或翻转(上下、左右跳转)
2017/01/08 Javascript
jQuery实现的简单动态添加、删除表格功能示例
2017/09/21 jQuery
使用Bootrap和Vue实现仿百度搜索功能
2017/10/26 Javascript
vue项目部署到Apache服务器中遇到的问题解决
2018/08/24 Javascript
JavaScript中AOP的实现与应用
2019/05/06 Javascript
layui点击弹框页面 表单请求的方法
2019/09/21 Javascript
JS实现音乐钢琴特效
2020/01/06 Javascript
详解ES6数组方法find()、findIndex()的总结
2020/05/12 Javascript
vue实现图片上传功能
2020/05/28 Javascript
[54:54]Newbee vs Serenity 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
Python 冒泡,选择,插入排序使用实例
2015/02/05 Python
python opencv实现切变换 不裁减图片
2018/07/26 Python
Windows 64位下python3安装nltk模块
2018/09/19 Python
基于python实现雪花算法过程详解
2019/11/16 Python
PyTorch学习:动态图和静态图的例子
2020/01/06 Python
服务器端jupyter notebook映射到本地浏览器的操作
2020/04/14 Python
Auchan Direct波兰:欧尚在线杂货店
2016/10/19 全球购物
英国计算机商店:Technextday
2019/12/28 全球购物
在阿联酋购买翻新手机和平板电脑:Teckzu
2021/02/12 全球购物
数控专业个人求职信范文
2014/02/05 职场文书
网络工程师专家职业发展路线
2014/02/14 职场文书
《小松树和大松树》教学反思
2014/02/20 职场文书
家庭财产分割协议书范本
2014/11/24 职场文书
小学班主任个人总结
2015/03/03 职场文书
员工手册董事长致辞
2015/07/29 职场文书
高并发下Redis如何保持数据一致性(避免读后写)
2022/03/18 Redis