zoukankan      html  css  js  c++  java
  • Vuex的简单使用

    Vuex

    采用集中式存储所有组件的数据状态,并且组件状态和后台数据是响应的

    Vuex核心概念

    • state:驱动应用的数据源

    • getters:为组件提供经过处理的数据源

    • mutations:用来更改 state 的唯一标准方式

    • actions:组件通过调用 actions 来提交 mutation

    • modules:每个 module 都有自己的 state、getters、mutations、actions 实现大型应用中业务模块数据的分支

    state

    • 存数据,也可以获取

    • 组件中通过 computed 属性来获取数据

    • return this.$store.state.products;

    store.js

    state: {// 存数据
        products: [
            { name: "马云", price: 200 },
            { name: "马化腾", price: 140 },
            { name: "马冬梅", price: 20 },
            { name: "马蓉", price: 10 }
        ]
    }

    app.vue

    computed: {
        products() {
            return this.$store.state.products;
        }
    }
    
    <li v-for="(item,i) in products" :key="i">
        name:
        <span>{{item.name}}</span>
        有这么多钱:
        <span>{{item.price}}</span>
    </li>

    getters

    • 获取数据,在这个函数里更改原数据并 return 出去

    • 组件中通过 computed 属性来获取数据

    • return this.$store.getters.saleProducts;

    store.js

    getters: {// 获取数据
        saleProducts: state => {
            return state.products.map(item => {
                return {
                    name: '**' + item.name + '**',
                    price: parseInt(item.price / 1.5)
                }
            })
        }
    },

    app.vue

    computed: {
        saleProducts() {
            return this.$store.getters.saleProducts;
        }
    }

    mutations

    • 事件注册,数据里的一切逻辑实现都写在这里

    • 组件中通过 methods 属性来执行 mutations 里的函数

    • this.$store.commit("reducePrice");

    • 这个属性不适合处理异步事件,因为在调试工具里不会等异步执行完就出结果

    store.js

    mutations: {// 事件注册
        reducePrice: (state) => {
            state.products.forEach(item => {
                item.price -= 1
            })
        }

    app.vue

    methods: {
        reducePrice: function() {
            // mutations
            this.$store.commit("reducePrice");
        } 
    }
    <button @click="reducePrice">商品降价</button>

    actions

    • 事件注册 处理异步事件 可以传参

    • 组件中通过 methods 属性来执行 actions 里的函数

    • this.$store.dispatch('reducePrice', amount)

    • 这个属性用来处理异步

    store.js

    actions: {// 事件注册 处理异步事件 可以传参
        reducePrice: (context,playload) => {
            setTimeout(() => {
                context.commit('reducePrice', playload)
            }, 2000);
        }
    }

    app.vue

    methods: {
        reducePrice: function(amount) {
            // actions
            this.$store.dispatch('reducePrice', amount)
        } 
    }
    <button @click="reducePrice(4)">商品降价</button>
  • 相关阅读:
    《Android深度探索HAL与驱动开发》第一章阅读心得
    《Android深度探索HAL与驱动开发》第二章阅读心得
    《Android深度探索HAL与驱动开发》第三章阅读心得
    第五章 搭建S3C6410开发板测试环境
    IOS 拾取器控件
    原生js实现jquery的getJSON方法
    css reset
    css3特效
    HTML5 有哪些特质
    css rest
  • 原文地址:https://www.cnblogs.com/lijieqiqi/p/qiqivuex.html
Copyright © 2011-2022 走看看