欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

详解如何在vue-cli中使用vuex

程序员文章站 2023-11-16 14:57:16
前言 众所周知,vuex 是一个专为 vue.js 应用程序开发的状态管理模式,在构建一个中大型单页应用中使用vuex可以帮助我们更好地在组件外部管理状态。而vue-cl...

前言

众所周知,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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。