VueX

一、什么是Vuex?

Vuex是一个专为vue.js应用程序开发的状态管理模式。
当我们构建一个中大型的项目时,Vuex可以更好的帮助我们在组件外部统一管理状态。

安装

以下步骤的前提是你已经完成了Vue项目构建,并且已转至该项目的文件目录下。

1.npm/cnpm安装Vuex

npm install vuex

2.在项目的根目录下新增一个store文件夹,在该文件夹内创建index.js , 初始化store下index.js中的内容 代码如下

import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex);
//导出创建好的Vuex构造器
export default new Vuex.Store({
state:{
        //存放的键值对就是所要管理的状态
        name:'helloVueX'
    }
})

3.将store挂载到当前项目的Vue实例当中去

在mian.js中引入

import Vue from 'vue'
import App from './App'
import router from './router'
import axios from 'axios'
import store from './store/index'//引入store下的index.js
Vue.config.productionTip = false
Vue.prototype.axios=axios;
/* eslint-disable no-new */
new Vue({
  el: '#app',
  router,
  store,
  components: { App },
  template: '<App/>'
})

4.在组件中使用Vuex

在组件标签中显示

<h1>{{this.$store.state.name}}</h1> //==>helloVueX

二、VueX中的核心内容

vuex中的核心属性,详细解读

state => 基本数据
getters => 从基本数据派生的数据
mutations => 提交更改数据的方法,同步!
actions => 像一个装饰器,包裹mutations,使之可以异步。
modules => 模块化Vuex
plugins => 插件

1.state

state是存储的单一状态,是存储的基本数据。

export default new Vuex.Store({
state:{//声明数据
        shopCar:[],
        n:0,
        user:{}
        msg:'',
        age:20,
        name:'www',
    },
})

2.getters

getters中的方法有两个默认参数
1.state 当前VueX对象中的状态对象
2.getters 当前getters对象,用于将getters下的其他getter拿来用
如不需要,第二个参数可以省略如下例子:

getters:{
        getsum(state){//相当于state的计算属性
            var sum=0
            for(var i = 0;i<state.shopCar.length;i++){
                sum+=state.shopCar[i]
            }
            return sum
        },
      //两个默认参数
        nameInfo(state){
            return "姓名:"+state.name
        },
        fullInfo(state,getters){
            return getters.nameInfo+'年龄:'+state.age
        }
    }

组件中调用

<h3>购物车{{$store.getters.getsum}}</h3>
console.log(this.$store.getters.fullInfo);  // 姓名:www年龄:20

3.mutations

提交mutation是更改Vuex中的store中的状态的唯一方法。
mutation必须是同步的,如果要异步需要使用action
每个 mutation 都有一个字符串的 事件类型 (type) 和 一个 回调函数 (handler)。这个回调函数就是我们实际进行状态更改的地方,并且它会接受 state 作为第一个参数,提交数据作为第二个参数。(如果没有传输数据,第二个参数也可省略) 例子如下

mutations:{//修改数据
        increment(){ //变更状态
             this.state.n++
         },
         jianjian(state){
            state.n--
         }
        addUserName(state,val){
            state.shopCar.push(val)
        },
}

在组件中调用

//1.不含数据
    jian(){
            this.$store.commit('jianjian')
        }, 
//2.传输数据
        tj(item){
            this.$store.commit('addUserName',item)
        },

4.actions

action 类似于 mutation,不同在于:
action 提交的是 mutation,而不是直接变更状态。
action 可以包含任意异步操作。
actions中的方法有两个默认参数
state
val 挂载参数
我们用如下例子来讲述actions:

actions:{
        uperKey(state,val){
            setTimeout(() => {
                state.commit('uperKey',val)
            }, 10);
        }
    }
 mutations:{//在mutation里处理修改数据
        uperKey(state,val){
            state.msg = val
        }
    },

在组件中调用

this.$store.dispatch('uperKey',10)   

5.Modules 模块化vuex

当项目变得很大时,store 对象会变得臃肿不堪。
为了解决以上问题,Vuex 允许我们将 store 分割到模块(module)。每个模块拥有自己的 state、mutation、action、getters、使得结构非常清晰,方便管理——从上至下进行类似的分割:

import user from './user.js'//先引入单个模块文件

modules:{
        user,
    },

user.js 结构内容

export default {
    state:{
        user:{},
    },
    mutations:{
        user(state,item){
            state.user=item
        }
    },
 getters:{},
action:{},
}

组件调用时需要加上模块名

this.$store.state.user.user.id

6.plugins 插件

先看一个简单地插件,长久储存
下载插件

npm/cnpm install  vuex-localstorage
引入
import createPersist from 'vuex-localstorage' 

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

推荐阅读更多精彩内容

  • ### store 1. Vue 组件中获得 Vuex 状态 ```js //方式一 全局引入单例类 // 创建一...
    芸豆_6a86阅读 732评论 0 3
  • 文章目录 一、Vuex概述[https://blog.csdn.net/u010358168/article/de...
    peterz博客阅读 835评论 2 8
  • 安装 npm npm install vuex --save 在一个模块化的打包系统中,您必须显式地通过Vue.u...
    萧玄辞阅读 2,945评论 0 7
  • 1. Vuex简介 Vuex是专门用来管理vue.js应用程序中状态的一个插件。他的作用是将应用中的所有状态都放在...
    黄黄黄大帅阅读 433评论 0 0
  • vuex 场景重现:一个用户在注册页面注册了手机号码,跳转到登录页面也想拿到这个手机号码,你可以通过vue的组件化...
    sunny519111阅读 8,021评论 4 111