详解如何在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 相关文章推荐
URL编码转换,escape() encodeURI() encodeURIComponent()
Dec 27 Javascript
如何将JS的变量值传递给ASP变量
Dec 10 Javascript
解决json日期格式问题的3种方法
Feb 02 Javascript
一个支持任意尺寸的图片上下左右滑动效果
Aug 24 Javascript
Node.js 异步异常的处理与domain模块解析
May 10 Javascript
原生JS实现不断变化的标签
May 22 Javascript
JS实现商品筛选功能
Aug 19 Javascript
React进阶学习之组件的解耦之道
Aug 07 Javascript
浅谈vue项目如何打包扔向服务器
May 08 Javascript
angularJs中orderBy筛选以及filter过滤数据的方法
Sep 30 Javascript
javascript中的数据类型检测方法详解
Aug 07 Javascript
微信小程序之数据绑定原理解析
Aug 14 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
电脑硬件及电脑配置知识大全
2020/03/17 数码科技
php弹出对话框实现重定向代码
2014/01/23 PHP
ThinkPHP3.1新特性之字段合法性检测详解
2014/06/19 PHP
PHP开发Apache服务器配置
2015/07/15 PHP
关于php中的json_encode()和json_decode()函数的一些说明
2016/11/20 PHP
fromCharCode和charCodeAt 方法
2006/12/27 Javascript
JAVASCRIPT  THIS详解 面向对象
2009/03/25 Javascript
javascript中的缓动效果实现程序
2012/12/29 Javascript
jquery.cookie用法详细解析
2013/12/18 Javascript
javascript中的原型链深入理解
2014/02/24 Javascript
JavaScript中匿名、命名函数的性能测试
2014/09/04 Javascript
DOM基础教程之使用DOM + Css
2015/01/20 Javascript
JS继承用法实例分析
2015/02/05 Javascript
JavaScript中的函数声明和函数表达式区别浅析
2015/03/27 Javascript
jQuery实现有动画淡出效果的二级折叠菜单代码
2015/10/17 Javascript
JavaScript对象数组排序函数及六个用法
2015/12/23 Javascript
详解JavaScript中的构造器Constructor模式
2016/01/14 Javascript
基于canvas实现的绚丽圆圈效果完整实例
2016/01/26 Javascript
Vue render渲染时间戳转时间,时间转时间戳及渲染进度条效果
2018/07/27 Javascript
React Router V4使用指南(精讲)
2018/09/17 Javascript
Vue-CLI3.x 设置反向代理的方法
2018/12/06 Javascript
bootstrap-closable-tab可实现关闭的tab标签页插件
2020/08/09 Javascript
学习python的几条建议分享
2013/02/10 Python
Python协程的用法和例子详解
2017/09/09 Python
python实现归并排序算法
2018/11/22 Python
python TF-IDF算法实现文本关键词提取
2019/05/29 Python
简单了解python中对象的取反运算符
2019/07/01 Python
python-numpy-指数分布实例详解
2019/12/07 Python
Python+unittest+requests+excel实现接口自动化测试框架
2020/12/23 Python
解决pycharm不能自动保存在远程linux中的问题
2021/02/06 Python
俄罗斯护发和专业化妆品购物网站:Hihair
2019/09/28 全球购物
土木工程专业推荐信
2014/02/19 职场文书
保险内勤岗位职责
2014/04/05 职场文书
歌颂党的演讲稿
2014/09/10 职场文书
OpenCV-Python使用cv2实现傅里叶变换
2021/06/09 Python
星际争霸 Light vs Action 一场把教主看到鬼畜的比赛
2022/04/01 星际争霸