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 的区别

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

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

友情链接更多精彩内容