详解如何在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学习笔记6 prototype的提出
Jan 11 Javascript
子窗口、父窗口和Silverlight之间的相互调用
Aug 16 Javascript
jQuery filter函数使用方法
May 19 Javascript
更快的异步执行(setTimeout多浏览器)
Aug 12 Javascript
DOM基础教程之模型中的模型节点
Jan 19 Javascript
javascript作用域链(Scope Chain)用法实例解析
Nov 30 Javascript
AngularJS入门教程之表格实例详解
Jul 27 Javascript
jquery radio的取值_radio的选中_radio的重置方法
Sep 20 Javascript
js运动事件函数详解
Oct 21 Javascript
javascript 内置对象及常见API详细介绍
Nov 01 Javascript
Ajax跨域实现代码(后台jsp)
Jan 21 Javascript
js实现石头剪刀布游戏
Oct 11 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中基于ts与nts版本- vc6和vc9编译版本的区别详解
2013/04/26 PHP
PHP使用DirectoryIterator显示下拉文件列表的方法
2015/03/13 PHP
thinkphp下MySQL数据库读写分离代码剖析
2017/04/18 PHP
风吟的小型JavaScirpt库 (FY.JS).
2010/03/09 Javascript
jquery及原生js获取select下拉框选中的值示例
2013/10/25 Javascript
jquery操作select详解(取值,设置选中)
2014/02/07 Javascript
关于不同页面之间实现参数传递的几种方式讨论
2017/02/13 Javascript
canvas实现图片根据滑块放大缩小效果
2017/02/24 Javascript
js实现显示手机号码效果
2017/03/09 Javascript
js阻止默认右键的下拉菜单方法
2018/01/02 Javascript
vue.js整合vux中的上拉加载下拉刷新实例教程
2018/01/09 Javascript
微信小程序之批量上传并压缩图片的实例代码
2018/07/05 Javascript
JavaScript数据结构与算法之二叉树添加/删除节点操作示例
2019/03/01 Javascript
JS开发自己的类库实例分析
2019/08/28 Javascript
axios如何取消重复无用的请求详解
2019/12/15 Javascript
vue随机验证码组件的封装实现
2020/02/19 Javascript
JavaScript进阶(三)闭包原理与用法详解
2020/05/09 Javascript
python插入数据到列表的方法
2015/04/30 Python
python读写二进制文件的方法
2015/05/09 Python
Python模拟简单电梯调度算法示例
2018/08/20 Python
Python3实现取图片中特定的像素替换指定的颜色示例
2019/01/24 Python
Python基础之高级变量类型实例详解
2020/01/03 Python
Python第三方库的几种安装方式(小结)
2020/04/03 Python
PyTorch在Windows环境搭建的方法步骤
2020/05/12 Python
关于python3.7安装matplotlib始终无法成功的问题的解决
2020/07/28 Python
python绘图pyecharts+pandas的使用详解
2020/12/13 Python
详解CSS3中border-image的使用
2015/07/18 HTML / CSS
基于MUI框架使用HTML5实现的二维码扫描功能
2018/03/01 HTML / CSS
什么是触发器(trigger)? 触发器有什么作用?
2013/09/18 面试题
运动会通讯稿200字
2014/02/16 职场文书
现场施工员岗位职责
2014/03/10 职场文书
活动总结报告格式
2014/05/09 职场文书
英文商务邀请函范文
2015/01/31 职场文书
小学运动会开幕词
2016/03/04 职场文书
2019学校运动会开幕词
2019/05/13 职场文书
C3 线性化算法与 MRO之Python中的多继承
2021/10/05 Python