关于vuex使用整理

241 阅读2分钟

做一下最近使用vuex的笔记整理

怎么安装引用就不说了,先贴一下我的index.js的结构

import Vue from "vue";
import Vuex from "vuex";
import VuexPersist from "vuex-persist";Vue.use(Vuex);// vuex长久化储存组件
const vuexLocal = new VuexPersist({ 
 storage: window.localStorage //可选,sessionStorage/indexDB
 });
export default new Vuex.Store({
  state: {},  
  mutations: {},
  getters: {}, 
 actions: {}, 
 modules: {}, 
 plugins: [vuexLocal.plugin]
});

1.首先vuex安装之后是存储在内存的,本身只是一个公共变量,重启浏览器等使浏览器内存重置的操作会丢失,因为与业务不符,所以使用了vuex-persist组件来实现长久化储存,这个组件的存储机制应该只是给原本的vuex加了一步写进磁盘和从磁盘取出的步骤,存的时候写入内存和磁盘,取的时候我将磁盘数据删掉依然能从内存中取到,但这个存取磁盘内存的先后顺序 我没有搞清楚。

2.vuex中的五个属性state、getters 、mutations 、actions、modules 

state:存储数据的地方,类似于vue文件中data的使用,由于vue单一数据源,只能有一个state.

getters:就是vue中的计算属性,我第一次用的时候被它的名字迷惑以为这个类似于get,set方法,并将取数据的操作放在这里,不过除了多走一步仿佛也没有什么毛病。getters里的方法接收的参数是state,由于我把它当做外部取数据那么用了,所以不免遇到外部传参需求,可以这么写:getValue:state=>e=>{return},e为外部参数,调用时this.$store.getters.getValue(e)

mutations: 相当于methods,用来定义方法,调用时this.$store.commit("funName", "value"); 是同步方法

actions:区别于mutations,actions里的方法可以是异步方法,返回一个promise,调用时this.$store.dispatch("funName", "value")

3.关于mutations与actions的区别

a、流程顺序

“相应视图—>修改State”拆分成两部分,视图触发Action,Action再触发Mutation。

b、角色定位

基于流程顺序,二者扮演不同的角色。

Mutation:专注于修改State,理论上是修改State的唯一途径。

Action:业务代码、异步请求。

c、限制

角色不同,二者有不同的限制。

Mutation:必须同步执行。

Action:可以异步,但不能直接操作State。

modules:因为单一树state只能有一个,为了解决可能因此带来的不便,可以在modules里再来一套这五个属性做套娃