Vuex的认识和简单应用

Posted dianmowj

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Vuex的认识和简单应用相关的知识,希望对你有一定的参考价值。

一、vuex是一个专为vue.js应用程序开发的状态管理模式。

应用场景:
1、多个视图依赖于同一个状态
2、来自不同视图的行为需要变更同一个状态
此时,我们可以把组件的共享状态抽取出来,以一个全局单例模式管理

技术图片

二、Vuex和单纯的全局对象有以下两点不同:

1、Vuex的状态存储是响应式的。当Vue组件从store中读取状态的时候,若store中的状态发生变化,那么相应的组件也会相应地得到高效更新。
2、不能直接改变store中的状态。改变store中的状态的唯一途径就是显示地提交(commit)mutation。

 

state:Vuex的状态存储
getter:vuex允许我们在store中定义"getter"(可以认为是store的计算属性)。就像计算属性一样,getter的返回值会根据它的依赖被缓存起来,且只有当它的依赖值发生了改变才会被重新计算。

 

mutation:更改vuex的store中的状态的唯一方法是提交mutation
mutation必须同步执行

 

action:action提交的事mutation,而不是直接变更状态

action可以包含任意异步操作

三、简单应用

store.js

 

 1 import Vue from ‘vue‘
 2 import Vuex from ‘vuex‘
 3 
 4 Vue.use(Vuex)
 5 
 6 export default new Vuex.Store(
 7   state: //状态
 8     products:[
 9       name:"马云",price:200,
10       name:"马化腾",price:140,
11       name:"马冬梅",price:20,
12       name:"马蓉",price:10
13     ]
14   ,
15   getters:
16     saleProducts:(state)=>
17       var saleProducts = state.products.map(
18         product =>
19           return 
20               name:‘**‘+ product.name +"**",
21               price:product.price / 2
22           
23       );
24       return saleProducts;
25     
26   ,
27   mutations: //触发事件改变数据
28     reducePrice:(state,payload)=>
29       state.products.forEach(product=>
30           product.price -= payload;
31       )
32     
33   ,
34   actions: //异步mutations操作
35     reducePrice:(context,payload)=>
36       setTimeout(function()
37         context.commit(‘reducePrice‘,payload);
38       ,2000)
39     
40   
41 )

 

Production.vue

 1 <template>
 2   <div id="product-list-one">
 3       <h2>Product List One</h2>
 4       <ul> 
 5           <li v-for="product in saleProducts" :key="product.name">
 6               <span class="name">product.name</span>
 7               <span class="price">$product.price</span>
 8           </li>
 9       </ul>
10       <button @click="reducePrice(4)">商品降价</button>
11   </div>
12 </template>
13 <script>
14 import  mapGetters  from ‘vuex‘
15 import  mapActions  from ‘vuex‘
16 export default
17   computed:
18       products()
19           return this.$store.state.products;
20       ,
21       ...mapGetters([
22           "saleProducts"
23       ])
24     //   saleProducts()
25     //       return this.$store.getters.saleProducts;
26     //   
27   ,
28   methods:
29       /*reducePrice:function(amount)
30           //this.$store.commit(‘reducePrice‘);
31           this.$store.dispatch("reducePrice",amount);
32       */
33       ...mapActions([
34           "reducePrice"
35       ])
36   
37 
38 </script>
39 <style>
40 
41 </style>

 

以上是关于Vuex的认识和简单应用的主要内容,如果未能解决你的问题,请参考以下文章

Vuex的简单认识

一文教会你认识Vuex状态机

一文教会你认识Vuex状态机

vue的挖坑和爬坑之vuex的简单入门

vuex在组件化开发中的简单应用小例子

vuex简单示例