Vue.js进阶系列(56)--Vuex总结篇

小编已经Wie大家分享完了有关Vuex的知识,下面进行简单的总结。


一、store的目录结构

  在前面,我们都将 state、mutations、getters、actions、module 放在index.js文件中,当代码量多的时候,就不利于管理,所以我们一般都将 mutations、getters、actions、module 抽离出去。具体的抽离结构如下:


  分别将getters、actions、module、mutations抽离成单独的文件,如果在store中的module中又包含了很多的小模块,就将小模块放到modules文件夹下面,然后每个单独是小模块又是单独的文件。
  我们一般不将state抽离出去,而是放在index.js文件中便于查看当前有哪些状态是被共享的。抽离后的index.js代码如下:

下面进行Vuex的知识总结。


二、Vuex基本概念

1.定义

Vuex是一个管理共享状态的管家,并且该状态是响应式的

2.状态管理

主要分成单界面管理和多界面管理

① 单界面管理

  首先明白三个概念:State:状态;View:视图层;Actions:主要是用户的各种操作:点击、输入等等,会导致状态的改变。
  而所谓的单界面就是指State、View、Action都是在同一个页面中的,所以叫做单页面状态管理。具体运作方式如下图:


② 多界面状态管理

  多界面状态管理就是指当某个状态被多个界面同时共享时,我们需要一个管家来管理这个被多界面共享的状态。具体的运作过程见下图:


3.使用方式

首先在终端安装Vuex,然后创建Vuex实例,最后书写相关的代码。具体使用如下图:



三、核心概念

Vuex中包含了5个核心概念,分别是:state、actions、getters、module、mutations。

1.state--单一状态树

  为了不让状态信息保存到多个Store对象中的,Vuex使用了单一状态树来管理应用层级的全部状态。
  也就是在项目中最好只new 一个store对象,然后所有状态有关的东西都放在一个store中的state进行统一的管理。

2.getters

① 定义

  getters 相当于计算属性。当数据要经过一系列变化时,将这一系列的变化写在getters内部。

② 使用

  在getters中声明一个方法,该方法的默认参数是state,然后返回相应的结果即可。具体代码如下:

//index.js
getters:{
      powerCounter(state){
        return state.counter * state.counter
      }
    }
<!--App.vue 文件-->
<template>
  <div id="app">
    {{$store.getters.powerCounter}}
  </div>
</template
③ 参数

  getters中出了默认的state之外,还可以传递getters参数,用来获取当前getters中的方法。比如:

const store = new Vuex.Store({
    state:{
      student:[
        {id:100,name:'zhangsan',age:21},
        {id:200,name:'lisi',age:18},
        {id:300,name:'wangwu',age:22},
        {id:400,name:'zhaoliu',age:19}
      ]
    },
    getters:{
      morestu(state){
        return state.student.filter(s => s.age>20)
      },
      morestuLength(state,getters){
        return getters.morestu.length
      }
    }
})

在morestuLength方法中通过参数getters获取了morestu方法的结果

④ 返回值

返回值可以返回变量,还可以返回函数。比如:

//返回变量
getters:{
      powerCounter(state){
        return state.counter * state.counter
      }
    }

//返回函数
    getters:{
      moreAgeStu(state){
        return function(age){
          return state.student.filter(s => s.age>age)
        }
      }
    }

3.mutations

① 作用

  Vuex的store状态的更新唯一方式:提交Mutation。也就是我们前面提到过的,必须经过 state --> Vuex --> Action --> Mutations 这个路径修改state的状态。

② 组成

主要由事件类型回调函数组成。比如:

mutations:{
    increase(state){
      state.counter++
      }

increase时间类型,(state){ state.counter++}是回调函数

③ 定义方式

主要是事件类型+回调函数,具体代码如上所示,这里不再展示

④ 参数

传递的参数主要有默认的state、变量和函数

⑤ 提交风格

主要有两种方式,一种是commit,一种是type
参数和提交风格可以参考这篇文章 https://www.jianshu.com/p/e695ab292460

⑥ 响应规则

  相应的原理是预先在store对象定义的属性会被加入到响应式系统中,而没有预先在store对象定义的属性不会被加入到响应式系统中,但是可以通过set方法使新增加的属性具有响应式。具体做法参考该文章:https://www.jianshu.com/p/e8a13d8b43a9

⑦ 常量类型

  使用常量替代Mutation事件的类型。将这些常量放在一个单独的文件中, 方便管理以及让整个app所有的事件类型一目了然。具体的使用方式见该文章:https://www.jianshu.com/p/9802842448bc

4.actions

① 定义

Action类似于Mutation, 但是是用来代替Mutation进行异步操作的

② 使用

使用方式和mutations类似,只是默认的参数是context,而且调用时是用dispatch调用的。

③ 参数

传递的参数很简单,这里不叙述

④ 在内容使用Promise

  使用Promise的目的是,除了修改数据之外还可以进行别的操作。一般将修改的数据写在Promie内部,然后别的操作写在then函数内,具体可以参考该文章:https://www.jianshu.com/p/3f566f48401f

5.module

  Vuex允许我们将store分割成模块(Module), 而每个模块拥有自己的state、mutation、action、getters等。
  mudole中的state、mutation、action、getters方式的书写和在store中书写是一样的,这里就不再叙述,不过要注意的是:在模块中,context.commit()仅仅提交自己模块的方法而不包括store中的方法。具体的可以参考该文章:https://www.jianshu.com/p/f4cb00cd0574

以上就是Vuex的全部内容,写的不好的地方还请大家多多包涵o( ̄︶ ̄)o

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,839评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,543评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,116评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,371评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,384评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,111评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,416评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,053评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,558评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,007评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,117评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,756评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,324评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,315评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,539评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,578评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,877评论 2 345