个人技术博客

一、技术概述

这个技术是做什么?学习该技术的原因,技术的难点在哪里

数据要全局显示的工具。Vuex应用的核心就是store(仓库),当Vue组件从store中读取数据的时候,若数据发生变化,那么相应的组件也会相应地得到高效更新。

2、技术详述,描述你是如何实现和使用该技术的,要求配合代码和流程图详细描述。

1、首先,我们需要声明一个store的index.js文件:

import Vue from 'vue'
import Vuex from 'vuex'
import getters from './getters'
import app from './modules/app'
import settings from './modules/settings'
// import tagsView from './modules/tagsView'
import user from './modules/user'
import permission from './modules/permission'

Vue.use(Vuex)
const store = new Vuex.Store({
  modules: {
    app,
    settings,
    // tagsView,
    user,
    permission
  },
  getters
})

export default store

2、在modules文件夹下,存储的相关数据类型:

 state: {

    //这里放全局参数

  },

  mutations: {

    //这里是set方法

  },

 getters: {        //这里是get方法   },

  actions: {

    //action 属性内,可以定义异步操作逻辑,以满足某些业务场景要求

  },

  modules: {

//为了给全局变量分组,所以需要写提前声明其他store文件,然后引入这里

  }

3、定义一个getters.js文件将访问的属性export

const getters = {
  sidebar: state => state.app.sidebar,
  device: state => state.app.device,
  token: state => state.user.token,
  avatar: state => state.user.avatar,
  name: state => state.user.username,
  nickname: state => state.user.nickname,
  userId: state => state.user.userid,
  email: state => state.user.email,
  major: state => state.user.major,
  slogan: state => state.user.slogan,
  phone: state => state.user.phone,
  roles: state => state.user.roles,
  permission_routes: state => state.permission.routes
  // visitedViews: state => state.tagsView.visitedViews,
  // cachedViews: state => state.tagsView.cachedViews
}
export default getters

4、可以在Vue中通过

this.$store.getters.userId

就可访问到全局变量userId。

三、技术使用中遇到的问题和解决过程。

在vuex.store中
state属性是用来定义公共变量的
mutations属性,在state中的变量只能在mutations通过方法修改
action属性,定义异步操作。
getters属性,可获取返回值,或者函数

在store中修改全局变量的方法需要调用函数commit才能够修改值

具体的调用方法是:store.commit(调用的函数,参数)

四、进行总结

如果不只用Vuex.store可能会带来一下问题
1、可维护性会下降,你要想修改数据,你得维护三个地方

2、可读性会下降,因为一个组件里的数据,你根本就看不出来是从哪来的

3、增加耦合,大量的上传派发,会让耦合性大大的增加,本来Vue用Component就是为了减少耦合,现在这么用,和组件化的初衷相背。

五、参考文献、参考博客

Vuex状态管理模式的面试题及答案

原文地址:https://www.cnblogs.com/zhixinlin/p/13192844.html