• vuex mapMutations 使用


    你可以在组件中使用 this.$store.commit('xxx') 提交 mutation,或者使用 mapMutations 辅助函数将组件中的 methods 映射为 store.commit 调用(需要在根节点注入 store)。

    import Vue from 'vue';
    import Element from 'element-ui'
    import 'element-ui/lib/theme-chalk/index.css'
    import App from './App';
    import router from './router';
    import Vuex from 'vuex';
    
    Vue.config.productionTip = false;
    Vue.use(Vuex);
    Vue.use(Element)
    
    //vuex的配置
    //注意Store是大写
    const store = new Vuex.Store({
        //数据保存
        state: {
            show: false,
            count: 0,
            list: [1, 5, 8, 10, 30, 50]
        },
        mutations: {
            increase(state, n = 1) {
                state.count += n;
            },
            decrease(state, n = 1) {
                state.count -= n;
            },
            switch_dialog(state) { // 这里的state对应着上面这个state
                state.show = state.show ? false : true
                // 你还可以在这里执行其他的操作改变state
            }
        },
        getters: {
            filteredList: state => {
                return state.list.filter(item => item < 31);
            }
        },
        actions: {
            asyncIncrease(context) {
                context.commit('increase');
            },
            switch_dialog123(context) { // 这里的context和我们使用的$store拥有相同的对象和方法
                context.commit('switch_dialog')
                // 你还可以在这里触发其他的mutations方法
    
            }
        }
    });
    
    /* eslint-disable no-new */
    new Vue({
        el: '#app',
        router,
        //使用vuex
        store: store,
        render: h => h(App),
    });
    <template>
        <div>
            {{count}}
            <button @click="handleIncrease">+5</button>
            <button @click="handleDecrease">-5</button> {{filteredList}}
            <button @click="handleRouter">跳转到 HelloWorld3</button>
            <button @click="showRouter">展示路由</button>
        </div>
    </template>
    
    <script>
        import { mapState } from 'vuex'
        import { mapGetters } from 'vuex'
        import { mapMutations } from 'vuex'
        export default {
            name: 'HelloWorld2',
            computed: {
                //            count(){
                //                return this.$store.state.count;
                //            },
                //            filteredList() {
                //                return this.$store.getters.filteredList;
                //            },
                ...mapState({
                    count: state => state.count
                }),
                // 使用对象展开运算符将 getter 混入 computed 对象中
                ...mapGetters([
                    'filteredList'
                ])
            },
            methods: {
                handleIncrease() {
                    //                this.$store.commit('increase', 5);
                    this.increase();
                },
                handleDecrease() {
                    this.$store.commit('decrease', 5);
                },
                handleAsyncIncrease() {
                    this.$store.dispatch('asyncIncrease');
                },
                handleRouter() {
                    this.$router.push('/HelloWorld3');
                },
                showRouter() {
                    console.log(this.$router);
                    console.log(this.$router.push);
                },
                //mapMutations 使用方法一
                //            ...mapMutations([
                //                'increase', // 将 `this.increase()` 映射为 `this.$store.commit('increase')`
                //            ]),
                //mapMutations 使用方法二
                ...mapMutations({
                    increase: 'increase'// 将 `this.increase()` 映射为 `this.$store.commit('increase')`
                })
            }
        };
    </script>
    
    <!-- Add "scoped" attribute to limit CSS to this component only -->
    <style scoped>
    
    </style>
  • 相关阅读:
    Auto-Test 要点纪录(一)
    终端应用变身文件 MD5/SHA1 校验工具
    MD5 algorithm in Objective C
    iphone开发-SQLite数据库使用
    【React】354- 一文吃透 React 事件机制原理
    【Web技术】353- CDN 科普
    【CSS】352- 有趣的CSS弹跳动画
    【Vuejs】351- 带你解析vue2.0的diff算法
    【每周小回顾】7- 一起回顾上周精彩内容
    【Vuejs】350- 学习 Vue 源码的必要知识储备
  • 原文地址:https://www.cnblogs.com/mengfangui/p/9150530.html
Copyright © 2020-2023  润新知