VUEX笔记

状态管理

当多个组件依赖于同一个数据时,比如购物车和结账,购物车需要作为全局变量,在整个单页面中需要调用的地方调用。在angular 1.X中我们通常用$rootscope来绑定,在vue中可以用VUEX开解决这个问题。

vuex介绍

vuex是一个专门为vue.js设计的集中式状态管理架构,集中存储和管理状态。一个组件的行为--→改变数据--→影响另一个组件的视图(这里影响的实际还是同一个组件,只是这个组件作为了全局变量,可供多处调用)。而管理状态就是对状态(数据)的获取和修改。
vuex组成:state(存放的数据状态,相当于Vue中的data)、getters(对state中的状态进行过滤处理,相当于vue实例中的 computed)、mutations(直接变更状态数据,相当于vue实例中的methods)、actions(间接修改数据,非必须,提交给mutation,异步操作多用actions,,相当于vue实例中的methods)。

vuex使用

添加依赖,使用依赖,创建实例,在vue实例中添加store。

<body>
    <div id="app">
        <template>
          <button @click="add">增加</button>
          <button @click="reduce">减少</button>
          {{countNum}}
        </template>
    </div>
</body>

<script src="https://cdn.bootcss.com/vuex/2.4.1/vuex.js"></script><!--直接引入-->
Vue.use(Vuex);//在创建Vue实例之前
var myStore =  new Vuex.Store({
    state:{
        //存放组件之间共享的数据
        count:0
    },
     mutations:{
         //显式的更改state里的数据
         reduce:function(state){
            state.count--;
         }
     },
     getters:{
         //获取数据的方法
         countNum:function(state){
            return state.count<0?0:state.count;//对返回数据做过滤,减小到0时不让再减小
         }
     },
     actions:{
         //异步方式调用
         add:function(content){
            setTimeout(function(){
                content.commit('add');
             },1000)
         }
     }
});
//创建vue实例
new Vue({
    el:'#app',
    data:{

    },
    store:myStore,//在vue实例中添加store
    computed:{
        countNum:function(){//通过计算得到新的countNum数据,页面可以通过{{}}获取到
            //return this.$store.state.count;
            return this.$store.getters.countNum;//getters方式获取数据
        }
    },
    methods:{
        add:function(){//通过action方式调用
            this.$store.dispatch('add');
        },
        reduce:function(){//通过mutations直接调用
            this.$store.commit('reduce');
        }
    }
})

vuex的几点说明

1.在根组件中引入vuex,根实例中引入store,则全局组件都可以获取到store中的数据,每个组件的this上都绑定的有$store属性,可以通过调用this.$store.state来获取store中的数据。
2.vuex中store的数据不能直接用{{}}在页面上取得,可以通过在vue实例中的computed方法计算后得到一个新数据再展示在页面上。
3.不能在vue实例中改变store的值,需要在vue实例通通过调用this.$store.commit方法来促发mutations中对应的方法。
4.action不是必要的,action一般用于异步操作。
详见:vuex action 与mutations 的区别

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

推荐阅读更多精彩内容

  • Vuex是什么? Vuex 是一个专为 Vue.js应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件...
    萧玄辞阅读 3,070评论 0 6
  • vuex 场景重现:一个用户在注册页面注册了手机号码,跳转到登录页面也想拿到这个手机号码,你可以通过vue的组件化...
    sunny519111阅读 7,973评论 4 111
  • 安装 npm npm install vuex --save 在一个模块化的打包系统中,您必须显式地通过Vue.u...
    萧玄辞阅读 2,901评论 0 7
  • 上一章总结了 Vuex 的框架原理,这一章我们将从 Vuex 的入口文件开始,分步骤阅读和解析源码。由于 Vuex...
    你的肖同学阅读 1,713评论 3 16
  • 目录 - 1.什么是vuex? - 2.为什么要使用Vuex? - 3.vuex的核心概念?||如何在组件中去使用...
    我跟你蒋阅读 4,093评论 4 51