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)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容