Vue方向:VueX状态管理配置/state/getter使用

1、VueX的配置

        将VueX安装在生产环境依赖中

        npm  install  vuex  --save


2、配置VueX

2.1  实例化Store

import  Vue  from  'vue'

import  Vuex from  'vuex'


//Vue通过use使用VueX插件

Vue.use(Vuex)


//实例化Vuex.Store

let  store = new Vuex.store({

        store:{

                count : 0

         }

})

2.2 通过vue实例配置store

    说明:

       1.   通过vue实例中的store选项

       2.   是为了将store对象挂Vue的原型$store上

       3.  这样所有的组件内部就可以使用 this.$store 来操作store

  import  Vue  from  'vue'

  import  App  from  './App.vue'

  import  router  from  './router'

  import  store  from  './store'


  Vue.config.productionTip = false


    new Vue({

            router,

            store,

            render:h=>h(App)

     }).$mount('#app')


3、使用State

3.1  单一状态树

             所谓的单一状态树,用一个对象包含应用中全部的状态,这个对象作为唯一数据源而存在。也就是意味着每个应用只包含一个store实例。

3.2  使用State中的数据

             在组件中使用state中的数据

<template>

    <div class="home">

            <div class="count">数字: {{ count }}</div>

            <button @click="increment">++</button>

            <button @click="decrement">--</button>

    </div>

</template>


<script>

export default {

        name: 'Home',

        data(){

                return { }

          },

        methods:{

                increment(){

                    // 直接操作State中的数据

                    this.$store.state.count++

                 },

                decrement(){

                        // 直接操作State中的数据

                        this.$store.state.count--

                }

            }

        }

</script>

<style >

    .count{

            font-size:30px;

            padding:20px;

        }

</style>

    示例总结:

        1.  可以直接修改Vuex中的状态(但不推荐),因为直接修改不利于调试


4、Getter的使用

4.1  Getter的了解

    1. 有的是我们对于store里的state中派生一些状态出来,如:数据的过滤

    2. 在获取数据后进行过滤处理,同样的逻辑可能会在不同的地方使用

    3. 在Vue中也可以采用计算属性进行处理(计算属性就是会将数据处理进行缓存的)

    4.  Vuex提供了一个getter,类似于store中的计算属性,根据依赖状态计算值后返回并缓存起来

    5.  只有当getter依赖的状态发生了改变时才会被重新计算

let  store = new Vuex.Store({

        state:{

            fruits:[

                   { id:1, text:'苹果', price:'20' },

                   { id:2, text:'梨子', price:'35' },

                   { id:3, text:'香蕉', price:'28' }, 

                   { id:4, text:'菠萝', price:'76' }, 

                   { id:5, text:'榴莲', price:'19' }, 

            ],

            gettters:{

                filterFruits(state){

                       return  state.fruits.filter( fruit => fruit.price > 20)

                  }

             }

       }

})

4.2  使用getter

<ul>

    <!-- 使用getter,即vuex中的计算属性 -->

    {{$store.getters.filterFruits}}

</ul>

4.3  Getter参数

1.  Getter的第一个参数为状态state,用于收获Getter的依赖状态

let store = new Vuex.Store({

     state:{

            fruits:[

                    {id:1,text:"苹果",price:20},

                    {id:2,text:"梨子",price:15},

            ]

        },

    getters:{

        filterFruits(state){

                console.log(state);

                /* state值为 { fruits:[ {id:1,text:"苹果",price:20}, {id:2,text:"梨子",price:15}] }, */

                return state.fruits.filter(fruit => fruit.price > 19)

            }

        },

})

2.  Getter的第二个参数

     Getter的第二个参数就是选项Getters,作用是用来获取其他Getter函数

let store = new Vuex.Store({

    state:{

        fruits:[

                {id:1,text:"苹果",price:20},

                {id:2,text:"梨子",price:15}

            ]

        },

        getters:{

                filterFruits(state,getters){

                        console.log(state);

                        console.log(getters);

                        /* { filterFruits: (...) get filterFruits: ƒ () __proto__: Object } */

                        return state.fruits.filter(fruit => fruit.price > 19)

                    }

            },

 })

3.  通过方法访问

  说明:

     1.  通常对于getter的使用方法,都是返回处理完毕后的数据

     2.  但是有的时候我们需要处理数据的条件是外部传递过来的,例如示例过滤价格

     3.  getter可以返回一个函数,这个函数用来接收外部传递的参数

let store = new Vuex.Store({

    state:{

        fruits:[

                {id:1,text:"苹果",price:20},

                {id:2,text:"梨子",price:15}

            ]

        },

        getters:{

                filterFruits(state,getters){

                         return (price) => { return state.fruits.filter(fruit => fruit.price > price)

                }

            }

        },

})

总结:

    1、getter返回的不是确定的值而是一个函数

     2、那么此时在通过$store.getters.filterFruits获取到的就是一个函数

     3、既然是函数就可以当成方法使用, 传递参数

     4、如 $store.getters.filterFruits(20)

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

推荐阅读更多精彩内容